1.jstat
jstat -gcutil pid 5s //pid进程号
每隔5s监控一次内存回收情况
E 代表 Eden 区使用率;
O(Old)代表老年代使用率 ;
P(Permanent)代表永久代使用率;
CCS 压缩使用比例
M 元空间(MetaspaceSize)已使用的占当前容量百分比
YGC(Young GC)代表Minor GC 次数;
YGCT代表Minor GC耗时;
FGC(Full GC)代表Full GC次数;
FGCT(Full GC)代表Full GC耗时;
GCT代表Minor & Full GC共计耗时。
统计监测工具
jstat [ generalOption | outputOptions vmid [interval[s|ms] [count]] ]
vmid是虚拟机ID,在Linux/Unix系统上一般就是进程ID。interval是采样时间间隔。count是采样数目。比如下面输出的是GC信息,采样时间间隔为250ms,采样数为4:
eg:jstat -gc 21711 250 4
2.jps(Java Virtual Machine Process Status Tool)
jps主要用来输出JVM中运行的进程状态信息。语法格式如下:
jps [options] [hostid]
如果不指定hostid就默认为当前主机或服务器。
命令行参数选项说明如下:
-
-q 不输出类名、Jar名和传入main方法的参数
-
-m 输出传入main方法的参数
-
-l 输出main类或Jar的全限名 //输出的jar名称和全限名
-
-v 输出传入JVM的参数 //输出的事jvm配置的参数
jstack
jstack -F pid 检查是否有死锁
使用jstack 排查最耗时线程的过程
1.使用top 然后shift+m 查看进程耗时,耗内存等排名 寻找最耗时进程 也可以用 ps -ef |grep **.java
2.top -Hp pid 找出该进程下最耗时线程 得到最耗时的线程xid
3.然后使用 printf "%x\n" xid 得出一个线程的16进制的 数
4.最后使用 jstack pid |grep xid pid进程id xid 线程id
查看线程信息。排查问题。
Jmap
jmap -dump:format=b,file=dumpFileName
jmap -dump:format=b,file=/tmp/dump.dat 21711
dump出来的文件可以用MAT、VisualVM等工具查看
eg:一个项目的jvm配置
-Xms1G -Xmx2G -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/home/*/app/*/logs/java_heapdump.hprof -Xloggc:/home/*/app/*/logs/ec_gc.log -verbose:gc -XX:+PrintGCDetails -XX:+PrintGCDateStamps -XX:+PrintGCTimeStamps -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=10 -XX:GCLogFileSize=100M