cpu是在什么情况下消耗比较高 (cpu利用率低和速度慢什么原因)

应用部署好之后发现程序cpu利用率异常的高,此时就需要debug找出是问题的罪魁祸首,我们可以先从找出最占用cpu的线程着手,然后根据堆栈信息进行具体代码分析,循环过多呢,还是造成了死锁,或者代码冗余等等。我的Java应用是使用的docker部署在linux服务器的,以linux服务器为例。

步骤一

docker ps:找到部署容器的CONTAINER I,这里我的是e488c433b69f

cpu占用高怎么解决需要更换啥硬件,cpu利用率低和速度慢什么原因

docker exec -it e488c433b69f /bin/bash:进入部署容器内

top:找出java程序的pid,我的pid是1

cpu占用高怎么解决需要更换啥硬件,cpu利用率低和速度慢什么原因

这里由于我使用的是docker容器部署,所以会多了几个进入容器的命令,实际上第一步仅使用top命令就可以了,这一步的最终目的是获取部署程序的pid

步骤二

根据第一步所获取到的pid,键入top -H -p pid 。然后按下shift+p,查找出cpu利用率最高的线程号,这里我的是384。值得注意的是384这个线程号需要转换为16进制的,以便后面查询使用,转换后的线程号为180,百度在线进制转换即可。

cpu占用高怎么解决需要更换啥硬件,cpu利用率低和速度慢什么原因

步骤三

jstack pid > /home/log.dat:这里的pid是步骤一获取的pid,我的是1。

进入重定向目录键入vim log.dat打开文件,查找线程号为180的堆栈信息。

cpu占用高怎么解决需要更换啥硬件,cpu利用率低和速度慢什么原因

当然,由于我的程序正常占用cpu少,所以堆栈的信息量正常,如果占用得多,堆栈信息的量也会比较多。这时候就就可以将该信息提供给开发人员,他们会根据线程信息分析出是属于哪一块的业务内容,对其进行抽丝剥茧,该优化的优化,该删除的删除。

本猿是一名自学而成的JAVA程序猿,仅此记录个猿的学习过程及理解,无误导他猿之嫌。对于知识的理解可能会有偏颇,以上内容也仅仅是我的个猿的总结观点,如有错误纰漏还请不吝赐教,我会及时改正。

可以给个关注吗?谢谢

“知行合一是我将为之追求一生的信条”