一、多线程调试
使用gdb查看线程信息。
(1)获取主线程id:ps -aux | grep 进程名称,例如:
(2)查看线程信息:gdb attach 线程id,例如
1和3表示进程启动运行依赖的库的信息,2表示里面的三个子线程。
info threads:查看线程信息
bt:查看当前线程堆栈信息
t Id:切换线程,比如
break 行号/函数名,比如
info b:查看线程信息,比如
r:重新运行到断点处
二、实用工具
1、pstack或者gstack:用于打印正在运行的进程的栈跟踪信息,它实际上是gstack的一个链接,而gstack本身是基于gdb封装的shell脚本.。此命令可显示每个进程的栈跟踪。如图
2、pstree -p 进程id:以树形结构显示进程内部线程的关系,如图
3、stress:压测工具,一般用来压测cpu和内存
stree -c num:产生 num个进程,每个进程都反复不停的计算随机数的平方根;
stress --vm 2 --vm-bytes 300M --vm-keep:产生2个进程,每个进程消耗300M内存,一直占用。
4、perf是Linux下的一款性能分析工具,能够进行函数级与指令级的热点查找.
常用命令:perf top -g -p id:动态显示进程函数耗cpu情况,降序排名
5、top -H -p pid:动态显示进程内部各线程的cpu、mem使用率,比如