最近运行服务器程序,在特定触发条件下,发现某个进程CPU占用率超过100%,心里一惊,因为服务器用c++写的,就决定调试下。
先按网上说的使用pstack指令打印cpu占满的进程的堆栈信息.
其中 pstack是基于gdb封装的shell脚本,有兴趣的可以去看一下。
pstack pid
发现正常的进程的堆栈显示比较正常,异常的进程的堆栈闲显示就全是??。
这个方法行不通,就换gdb调试。
gdb -nx /proc/pid/exe pid
backtrace
显示在handCard这里死循环了。
问题定位成功,下面就是看逻辑怎么死循环了。