1、使用top命令查找进程id
在控制台中输入:top
图1
如图1所示,进程pid:48915占用cpu为100.3,当找到对应的进程id后,再次使用top命令查找进程内线程占用情况
2、使用top命令查找线程消耗cpu时长
top -H -p 48915
图2
通过输入以上命令后可以发现线程id:48915 存在大量消耗cpu资源,其占用时长为43040分钟,为了探其具体情况,则需进行步骤3。
3、通过gdb命令进行排查分析线程内部在具体操作什么导致
3.1 通过输入gdb命令附加到进程
gdb attach 48915
图4
如图4所示,由于线程数太多,因此未将所有的线程id列出
3.2输入info threads 命令列出所有的线程id
图5
如图5所示,发现是主线程1号线程存在死锁情况,当进行访问该锁时,无法访问导致。通过比较程序代码后大概晓得具体原因,因此需要修改代码即可。
3.3由于当前是主线程,因此直接使用bt命令,查找其线程调用堆栈问题,若非主线程情况下,则需要输入thread 线程序列号进行切换到具体的线程,再输入bt命令进行分析。
通过以上三大步骤,因此我彻底了解了为什么会导致本进程消耗cpu资源。