一、前言
前面几篇文章介绍了现阶段掌握的windows下排查cpu过高的手段,因本身职能为跨平台开发,这边总结下Linux下的几种方法:1.通过top命令进行排查 2.通过perf工具进行排查。本文主要对top命令进行总结。
【debug问题点】:CPU占用率过高问题排查
【环境】:Linux
【使用工具】:top命令
二、问题单
待提交
三、问题分析
3.1、top页面分析
页面分析:
1.
当前系统时间 / 系统运行时间 / 当前有2个用户登录系统 / load暂未研究2.
PID — 进程id
USER — 进程所有者
PR — 进程优先级
NI — nice值。负值表示高优先级,正值表示低优先级
VIRT — 进程使用的虚拟内存总量,单位kb。VIRT=SWAP+RES
RES — 进程使用的、未被换出的物理内存大小,单位kb。RES=CODE+DAT
SHR — 共享内存大小,单位kb
S — 进程状态。D=不可中断的睡眠状态 R=运行 S=睡眠 T=跟踪/停止 Z=僵尸进程
%CPU — 上次更新到现在的CPU时间占用百分比
%MEM — 进程使用的物理内存百分比
TIME+ — 进程使用的CPU时间总计,单位1/100秒
COMMAND — 进程名称(命令名/命令行)
3.2、定位问题线程
通过1来查看每个核的使用情况,找到cpu使用率最高的进程,如下图:
然后使用 top -H -p 进程号 查看异常线程,通过%CPU找到存疑线程,后续需要通过这边怀疑的线程id进行分析:
3.3、gdb调试
因保密机制,只提供命令行调试流程:
上图中info threads命令行正常应该会出现线程信息。然后我们可以通过3.2步骤中定位到的存疑线程id,通过thread apply 线程id bt查看该线程的堆栈信息,最后通过走读代码逻辑进行分析。
原理介绍:
info threads:查看线程关系
thread apply 线程PID bt:查看占用CPU高的线程堆栈
四、优化方法
待提交
五、总结
待提交