分析CPU占用率过高的问题

    cpu占用率过高的原因:1、代码中存在死循环;2、算法过于复杂。对于算法过于复杂而导致的CPU占用率过高的问题,分析起来并不容易。下面提供一种方法,不管你对代码的逻辑以及业务的需求是否了解,只要掌握了这种方法,都可以将问题定位出来。

    我们都知道,在Linux、unix下都有性能统计工具,通过top命令,我们可以看到某个进程所占用的CPU。

第一步,找到cpu到底被谁吃了,

       通过 top  -p  pid  命令查看进程的CPU占用率,在top命令的界面输入“H”,查看该进程所有的线程的统计情况(CPU占用率等)。通过top的H命令,可以获取到如下详细信息:每个线程消耗了多少CPU(H命令下,PID列是指线程ID)。找到CPU占用率高的线程id,并记录下来。


第二步:打印线程堆栈

‘    在Linux下,可以通过kill -3  pid命令获取线程堆栈。注意,在启动进程时,需要将进程重定向到文件中,否则线程堆栈无法打印。


第三步:根据PID找到对应线程堆栈中的线程

   在Java thread dump中,每个线程都有tid=....nid=....,其中,nid就是本地线程id,对应刚才top命令输出的pid,这是在 Java thread dump 中采用16进制输出的。。将第一步中记录下来的线程id,转化为16进制。在线程堆栈文件中,找到对应的线程,通过堆栈信息就可以看到cpu占用率高的线程到底在做些什么了。。。


知道线程在做些什么之后,就很容易地位出有问题的代码啦。。到此,大功告成。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值