一 top命令
1.1 查看进程使用cpu的情况
使用top命令
2.或者使用 top -p pid ;如这里使用 top -p 2856
1.2 查看某个进程下线程的运行情况
1.2.1 方法1
ps H -eo user,pid,ppid,tid,time,%cpu,cmd --sort=%cpu | grep 进程号
这里我们可以看到用户、进程号、父进程号、线程号、cpu占用总时长、cpu占用率、程序名。按照cpu的值进行了升序排列,最后一个即为占用cpu最高的线程,这样就可以找到对应线程号。
图中第4列就是线程号,第5列是cpu占用时长,第6列是cpu占用率。
排除进程2856的子进程,以及子进程下的线程,剩下就是进程2856下的直接线程。即图中圈红排除剩余的部分。等于 top -H -p pid 2856。
1.2.2 方法2
-H:开启线程模式 ; -p: 进程号
1.使用 top -H -p pid(具体的进程号)
查看该进程下所有线程占用CPU情况
结论:
1.使用此命令 top -H -p pid xxx ;显示的pid 指的是【线程id】
2.在方法1中,排除进程2856的子进程,以及子进程下的线程,剩下就是进程2856下的直接线程。即图中圈红排除剩余的部分。等于 top -H -p pid 2856。
1.3 通过堆栈命令工具定位到代码行级别
1.命令: gstack/pstack 进程号
pstack是gstack的软连接而已。
2.pstack保存该进程的线程快照:根据命令下输出的线程id,查看体线程堆栈信息。
3.线程较多,我们可以指定线程重定向到一个文本文件: gstack 进程号 >gstack.txt,方便查看。这个文本文件里存放的就是线程号和调用堆栈一对一的映射。建议多抓取几次,如果每次都是一样的调用堆栈,基本可以确定就是那块代码出的问题了。https://www.cnblogs.com/ws007/p/13852055.html
1.4 总结
top 命令后:显示的pid 指的是进程id;
top -H -p pid 命令后, 显示的是线程id;