Java内存,CPU占用太高排查
1.ps -ef | grep tomcat名字 -->拿到Tomcat进程的pid
2.jstack -l 进程pid >> jstack.log -->打印并保存该进程中堆栈的使用信息日志
2.top -Hp pid -->展现进程中全部线程的cpu占用状况
3.printf %x 线程pid -->该线程对应的16进制
4.vim jstack.log -->编辑查找3中打印的16进制值
5.分析并定位到问题代码
Java内存泄漏排查
1.ps -ef | grep 进程 --->拿到进程的pid
2.top -p [pid] -->查看进程资源占用状况 只要看内存
3.jstat -gcutil [pid] 60000 -->总结垃圾回收统计 每分钟输出一次
jstat -gc [pid] 60000 -->垃圾回收统计 每分钟输出一次
jstat -gcnew pid --> 新生代垃圾回收统计
jstat -gccapacity pid -->堆内存统计
jstat -gcmetacapacity pid -->元数据空间统计
jstat -gcnewcapacity pid -->新生代内存空间统计
4.观察结果 是否存在大量full gc, 若是发现是由于大量FULL GC形成程序执行缓慢的话,就要接着查看究竟是程序的哪些部分占用的
5.jmap -histo:live [pid] | head -n 1000 -->查看进程下各类类型的对象建立了多少个,以及每种对象占用内存的状况vim
释、2.中参数详解
total 进程总数
running 正在运行的进程数
sleeping 睡眠的进程数
stopped 中止的进程数
zombie 僵尸进程数
Cpu(s):
us 用户空间占用CPU百分比
sy 内核空间占用CPU百分比
ni 用户进程空间内改变过优先级的进程占用CPU百分比
id 空闲CPU百分比
wa 等待输入输出的CPU时间百分比
hi:硬件CPU中断占用百分比
si:软中断占用百分比
st:虚拟机占用百分比
3.中jstat -gcutil [pid] 60000参数详解
S0:幸存1区当前使用比例
S1:幸存2区当前使用比例
E:伊甸园区使用比例
O:老年代使用比例
M:元数据区使用比例
CCS:压缩使用比例
YGC:年轻代垃圾回收次数
FGC:老年代垃圾回收次数
FGCT:老年代垃圾回收消耗时间
GCT:垃圾回收消耗总时间
jstat -gc [pid] 60000参数详解
S0C:第一个幸存区的大小
S1C:第二个幸存区的大小
S0U:第一个幸存区的使用大小
S1U:第二个幸存区的使用大小
EC:伊甸园区的大小
EU:伊甸园区的使用大小
OC:老年代大小
OU:老年代使用大小
MC:方法区大小
MU:方法区使用大小
CCSC:压缩类空间大小
CCSU:压缩类空间使用大小
YGC:年轻代垃圾回收次数
YGCT:年轻代垃圾回收消耗时间
FGC:老年代垃圾回收次数
FGCT:老年代垃圾回收消耗时间
GCT:垃圾回收消耗总时间
jstat -gcnew pid参数详解
S0C:第一个幸存区大小tomcat
S1C:第二个幸存区的大小服务器
S0U:第一个幸存区的使用大小线程
S1U:第二个幸存区的使用大小日志
TT:对象在新生代存活的次数对象
MTT:对象在新生代存活的最大次数进程
DSS:指望的幸存区大小内存
EC:伊甸园区的大小ci
EU:伊甸园区的使用大小资源
YGC:年轻代垃圾回收次数
YGCT:年轻代垃圾回收消耗时间
jstat -gcmetacapacity pid参数详解
MCMN:最小元数据容量
MCMX:最大元数据容量
MC:当前元数据空间大小
CCSMN:最小压缩类空间大小
CCSMX:最大压缩类空间大小
CCSC:当前压缩类空间大小
YGC:年轻代垃圾回收次数
FGC:老年代垃圾回收次数
FGCT:老年代垃圾回收消耗时间
GCT:垃圾回收消耗总时间
jstat -gcnewcapacity pid参数详解
NGCMN:新生代最小容量
NGCMX:新生代最大容量
NGC:当前新生代容量
S0CMX:最大幸存1区大小
S0C:当前幸存1区大小
S1CMX:最大幸存2区大小
S1C:当前幸存2区大小
ECMX:最大伊甸园区大小
EC:当前伊甸园区大小
YGC:年轻代垃圾回收次数
FGC:老年代回收次数
jstat -gcoldcapacity pid
OGCMN:老年代最小容量
OGCMX:老年代最大容量
OGC:当前老年代大小
OC:老年代大小
YGC:年轻代垃圾回收次数
FGC:老年代垃圾回收次数
FGCT:老年代垃圾回收消耗时间
GCT:垃圾回收消耗总时间