系统卡死无法挂载gdb问题定位

1.CPU满导致?
mpstat -P ALL 2(每隔2s打印所有CPU的运行情况)
10:35:40     CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest   %idle
10:35:42     all    0.25    0.00    0.38    0.25    0.63    0.25    0.00    0.00   98.24
10:35:42       0    0.50    0.00    0.50    1.00    1.00    1.00    0.00    0.00   96.00
10:35:42       1    0.00    0.00    0.00    0.00    0.50    0.00    0.00    0.00   99.50
10:35:42       2    0.50    0.00    0.50    0.00    0.50    0.00    0.00    0.00   98.49
10:35:42       3    0.00    0.00    0.50    0.00    0.50    0.00    0.00    0.00   98.99

可以定位出来是否CPU性能满了导致卡死

2.哪个线程导致CPU满?
pidstat -p ALL 2 -t(每隔2s打印所有线程占用CPU情况)
10:37:35         TGID       TID    %usr %system  %guest    %CPU   CPU  Command
10:37:39            1         -    0.00    0.00    0.00    0.00     0  init
10:37:39            -         1    0.00    0.00    0.00    0.00     0  |__init
10:37:39            2         -    0.00    0.00    0.00    0.00     0  kthreadd
10:37:39            -         2    0.00    0.00    0.00    0.00     0  |__kthreadd
10:37:39            3         -    0.00    0.00    0.00    0.00     0  ksoftirqd/0
10:37:39            -         3    0.00    0.00    0.00    0.00     0  |__ksoftirqd/0
10:37:39            4         -    0.00    0.00    0.00    0.00     0  kworker/0:0
10:37:39            -         4    0.00    0.00    0.00    0.00     0  |__kworker/0:0

pidstat -p ALL -t 2 | awk '{if($7 >5) print}'(每隔2s打印占用CPU超过5%的线程)

到目前为止可以定位到哪个或者哪些线程导致CPU性能满

3.此线程的具体调用堆栈是啥?
echo y > /proc/sysrq-trigger(加解密)
echo t > /proc/sysrq-trigger(将所有线程的调用堆栈打印到dmesg中)

然后在dmesg信息中查找线程号,可以找到此线程的调用堆栈

至此,已经定位出导致卡死问题的函数堆栈,接下来Review代码即可

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值