线上cpu 内存占用高的排查
2018-08-21 本文已影响0人
小绵羊你毛不多
cpu占用高
1.查看进程
top 查看资源占用情况 (交互 M P分别是按照内存和cpu排序 q退出)
- 查找线程 : 查看该进程所有线程信息,找到占用率最高的那个
top -H -p <pid>
或者
ps -mp <pid> -o THREAD,tid,time
- 将线程id转换成十六进制
printf "%x\n" <pid>
- 查找java的堆栈信息
jstack <pid> | grep -a 线程id(十六进制)
内存占用高
jstat:JVM统计监测工具
- jstat命令可以查看堆内存各部分的使用量,以及加载类的数量
- 命令的格式如下:jstat [-命令选项] [vmid] [间隔时间/毫秒] [查询次数] jstat详情参考
-gcutil : 总结垃圾回收统计
[~]$ jstat -gcutil <pid>
S0 S1 E O M CCS YGC YGCT FGC FGCT GCT
62.12 0.00 81.36 28.82 95.68 - 12 0.736 0 0.000 0.736
- 查看进程的堆栈情况
jstack <pid> >>jstack.out
或者使用 jmap(Memory Map) 查看内存情况 , 如果运行在64位JVM上,可能需要指定-J-d64命令选项参数。
1.查看进程堆内存使用情况
jmap -heap <pid>
2.查看堆内存中的对象数目、大小统计直方图,如果带上live则只统计活对象
jmap -histo[:live] <pid>
3.用jmap把进程内存使用情况dump到文件中,再用jhat分析查看
jmap -dump:format=b,file=<dumpFileName> <pid>
具体可查阅这个文章 JVM性能调优监控工具jps、jstack、jmap、jhat、jstat使用详解
jps 主要用来输出JVM中运行的进程状态信息