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代码即可