关于线上程序排错的一些命令 gstack,strace,gcore(Linux)

关于Linux程序运行中查看堆栈的一些命令

最近项目上遇到一些问题,服务器程序在运行的时候cpu特别高,尤其是逻辑线程,一度达到99%。为了查找问题,使用了一些之前没有用过的命令,加上我之前用过的几个命令,写一篇记录

gstack

gstack 线程id,例如:gstack 2939,可以查看到当前线程的堆栈信息,如果程序的当前线程占cpu特别高,可能会出现死循环或者其他症状,我们可以通过使用gstack命令查看当前线程的堆栈信息来诊断问题.

strace

strace -T -r -c -p 线程id,例如:strace -T -r -c -p 2939,可以得到当前线程的所有系统调用统计,停止统计的时候必须自己手动退出,会输出使用命令到停止统计期间的信息.

gcore

gcore 进程id,例如:gcore 12345,可以得到当前进程的所有线程的堆栈信息.

一些总结,通过以上这些命令可以间接观察到程序当前的运行状态和运行位置.给予程序开发者更多的讯息以诊断程序当前可能出现的问题,有一个需要注意的地方,gstack和strace在运行期间不会影响到程序本身的运行,而gcore会将程序暂停,影响程序的正常工作.