全局监控 dashboard
,先来查看一下总览:
1、首先查看一段简单的模拟CPU飙高的代码
fun cpuHigh() {
Thread {
while (true) {
println("cpu飙升中~")
}
}.start()
}
2、运行项目,运行Arthas,找到自己当前项目对应的PID进行监听
3、使用 thread
命令,排查当前项目中的各个运行中方法的CPU占用率情况
可见图中,ID=11
的线程CPU占用率很高,达到66.09%
由这里可知,Java的状态共分为6种:NEW: 0, RUNNABLE: 9, BLOCKED: 0, WAITING: 4, TIMED_WAITING: 2, TERMINATED: 0
4、使用 thread -[id]
命令,继续查看这个线程具体是哪个方法所导致的CPU占用率过高
由图可见,id=11
的任务处于RUNNABLE状态,且CPU占用率高的主要原因是因为一直进行FileOutputStream操作,也就是输出流操作,并且定位代码在 TestMain.kt
中的第28行执行了这个高CPU占用率的方法,而导致的,再来看下代码