一、ps+top+jstack,查看cpu过高的线程信息
1、lsof -i:8401 通过启动的端口号查找进程ID
2、top -Hp pid 获取线程耗费cpu或时间最高的线程号
3、printf "%x\n" 21742 将线程号21742转化16进制
4、jstack pid | grep 54ee
二、ps+top+jmap+jhat,查看线程堆内存使用信息
1、ps aux|grep mypro 通过ps命令查找进程ID
2、top -Hp pid 获取线程
3、jmap -dump:format=b,file=/tmp/dump.dat 21711 对21711的进程进行Dump
4、jhat -port 9998 /tmp/dump.dat jhat使用9998端口查看命令
5、10.10.32.158:9998 在浏览器中输入主机地址:9998查看
6、在页面上搜索WebappClassLoader,找到他的上级引用,一层一层点进去往上找,直到找到相关联的类信息
三、jmap
jmap:查看类加载器与持久代信息,还可查看堆内存信息,执行dump命令将信息导入文件中
jmap -heap 21711 查看进程堆内存使用情况---观察各个分区情况
jmap -histo:live 21711 | more 查看进程堆内存详细使用情况
jmap -dump:format=b,file=/tmp/dump.dat 21711 对21711的进程进行Dump
还有其它工具TProfiler
四、jstack
jstack 21711 查看进程下所有线程栈信息,检查是否死锁
五、vmstat 180 20 3分钟(180秒)统计一次系统资源情况,一共统计20次
in 每秒CPU的中断次数,包括时间中断
cs 每秒上下文切换次数,例如我们调用系统函数,就要进行上下文切换,线程的切换,也要进程上下文切换,这个值要越小越好,太大了,要考虑调低线程或者进程的数目,例如在apache和nginx这种web服务器中,我们一般做性能测试时会进行几千并发甚至几万并发的测试,选择web服务器的进程可以由进程或者线程的峰值一直下调,压测,直到cs到一个比较小的值,这个进程和线程数就是比较合适的值了。系统调用也是,每次调用系统函数,我们的代码就会进入内核空间,导致上下文切换,这个是很耗资源,也要尽量避免频繁调用系统函数。上下文切换次数过多表示你的CPU大部分浪费在上下文切换,导致CPU干正经事的时间少了,CPU没有充分利用,是不可取的