CPU飙高排查工具:
1)、用命令top查看java进程的内存和cpu占用情况。
2)、top -Hp [pid] 查询所有线程列表
3)、将需要的线程ID转换为16进制格式:printf “%x\n” [tid]
4)、jstack pid | grep [tid] -A 30 查看该线程堆栈信息
内存过高或者频繁full gc排查工具:
1)、查看占用内存最大的10个进程:ps -aux | sort -k4nr | head -n 10
2)、查看内存占用最大的进程的命令:ps aux| grep -v “USER” |sort -n -r -k 4 |awk ‘NR==1{ print $0}’
3)、用jstat命令可以看服务的gc情况(例:jstat –gc [pid] 1000 10),如果一直在频繁的full gc或者gc时间过长,内存肯定有大量某个对象回收不掉
4)、可以用jmap -histo pid查询指定java进程的所有对象使用内存情况。
5)、实在不行可以用jmap命令dump堆文件下来(例:jmap -dump:format=b,file=文件名 [pid]),然后用MAT工具分析
磁盘IO阻塞排查工具:
1)、用top命令如果看到%wa过高,一般就是磁盘IO阻塞了
2)、可以用iostat查看IO阻塞的具体情况(例:iostat –x 1 5),如果%util过高,await与svctm的数值差异大,肯定就是磁盘IO阻塞了,r/s和w/s的数值可以分析出是阻塞在读还是在写
3)、用iotop命令可以看到具体是哪个进程占用着磁盘IO(例:iotop -oP)
4)、用lsof命令可以找到该进程操作了哪些文件(例:lsof –p [pid])
网络IO阻塞排查工具:
1)、iftop命令可以看到是与哪个地址有大量IO传输(例:iftop -n)
2)、然后可以用netstat命令查看是否有IO积压(例:netstat -antop |grep [ip])