1、查看Java进程PID和启动类和启动参数
1.1 jps
命令
# 1、列出PID和主类名
jps
2008 Bootstrap
2657 Jps
# 2、列出PID和Java完成主类名
jps -l
2017 org.apache.catalina.startup.Bootstrap
2612 sun.tools.jps.Jps
# 3、列出PID和应用程序参数 会列出jar包
jps -lm
2017 org.apache.catalina.startup.Bootstrap start
2588 sun.tools.jps.Jps -lm
# 4、列出PID和JVM参数启动参数
jps -v
2017 Bootstrap -Djava.util.logging.config.file=/usr/local/tomcat-web/conf/logging.properties -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Dfile.encoding=UTF-8 -Xms256m -Xmx1024m -XX:PermSize=256m -XX:MaxPermSize=512m -verbose:gc -Xloggc:/usr/local/tomcat-web/logs/gc.log-2014-02-07 -XX:+UseConcMarkSweepGC -XX:+PrintGCDetails -XX:+PrintGCTimeStamps -Xnoclassgc -Djava.endorsed.dirs=/usr/local/tomcat-web/endorsed -Dcatalina.base=/usr/local/tomcat-web -Dcatalina.home=/usr/local/tomcat-web -Djava.io.tmpdir=/usr/local/tomcat-web/temp
2624 Jps -Dapplication.home=/usr/lib/jvm/jdk1.6.0_43 -Xms8m
# 类似的命令
jps -lvm
平时推荐使用:
jps -l # 查看启动了哪些java进程
# 然后使用pid查看进程的端口
jps -v # 查看某进程的启动参数
2、使用图形化界面
2.1 jconsole命令
查看某一个虚拟机的内存使用情况
3、查看JVM内存使用情况命令
3.1 jstat -gcutil java进程PID 打印时间间隔 (ms) 打印次数
jstat -gcutil 808508 1000 5
S0 S1 E O M CCS YGC YGCT FGC FGCT GCT
99.85 0.00 94.45 19.26 96.09 92.92 2 0.020 0 0.000 0.020
99.85 0.00 94.45 19.26 96.09 92.92 2 0.020 0 0.000 0.020
99.85 0.00 94.45 19.26 96.09 92.92 2 0.020 0 0.000 0.020
99.85 0.00 94.45 19.26 96.09 92.92 2 0.020 0 0.000 0.020
99.85 0.00 94.45 19.26 96.09 92.92 2 0.020 0 0.000 0.020
# 打印的是各区使用空间占总空间的百分比
3.2 jstat命令详情
jstat有如下选项:
-class:
监视类装载、卸载数量、总空间及类装载所耗费的时间
-gc:
监听Java堆状况,包括Eden区、两个Survivor区、老年代、永久代等的容量,以用空间、GC时间合计等信息
-gccapacity:
监视内容与-gc基本相同,但输出主要关注java堆各个区域使用到的最大和最小空间
-gcutil:
监视内容与-gc基本相同,但输出主要关注已使用空间占总空间的百分比
-gccause:
与-gcutil功能一样,但是会额外输出导致上一次GC产生的原因
-gcnew:
监视新生代GC状况
-gcnewcapacity:
监视内同与-gcnew基本相同,输出主要关注使用到的最大和最小空间
-gcold:
监视老年代GC情况
-gcoldcapacity:
监视内同与-gcold基本相同,输出主要关注使用到的最大和最小空间
-gcpermcapacity:
输出永久代使用到最大和最小空间
-compiler:
输出JIT编译器编译过的方法、耗时等信息
-printcompilation:
输出已经被JIT编译的方法
一些术语的中文解释:
S0C:S0区容量(S1区相同,略)
S0U:S0区已使用
EC:E区容量
EU:E区已使用
OC:老年代容量
OU:老年代已使用
PC:Perm容量
PU:Perm区已使用
YGC:Young GC(Minor GC)次数
YGCT:Young GC总耗时
FGC:Full GC次数
FGCT:Full GC总耗时
GCT:GC总耗时
4、 其他常用命令(参考自)
4.1 jstack
用于生成当前JVM的所有线程快照,线程快照是虚拟机每一条线程正在执行的方法,目的是定位线程出现长时间停顿的原因。
-F:当正常输出的请求不被响应时,强制输出线程堆栈
-l:除堆栈外,显示关于锁的附加信息
-m:如果调用到本地方法的话,可以显示C/C++的堆栈
命令格式:jstack [option] vmid
4.2 jmap
jmap用来查看堆内存使用状况,一般结合jhat使用。
用于显示当前Java堆和永久代的详细信息(如当前使用的收集器,当前的空间使用率等)
-dump:生成java堆转储快照
-heap:显示java堆详细信息(只在Linux/Solaris下有效)
-F:当虚拟机进程对-dump选项没有响应时,可使用这个选项强制生成dump快照(只在Linux/Solaris下有效)
-finalizerinfo:显示在F-Queue中等待Finalizer线程执行finalize方法的对象(只在Linux/Solaris下有效)
-histo:显示堆中对象统计信息
-permstat:以ClassLoader为统计口径显示永久代内存状态(只在Linux/Solaris下有效)
命令格式:jmap [option] vmid
用jmap把进程内存使用情况dump到文件中,再用jhat分析查看
jmap进行dump命令格式如下:
jmap -dump:format=b,file=dumpFileName pid
我一样地对上面进程ID为21711进行Dump:
root@ubuntu:/# jmap -dump:format=b,file=/tmp/dump.dat 21711
Dumping heap to /tmp/dump.dat …
Heap dump file created
4.3 jhat
用于分析使用jmap生成的dump文件,是JDK自带的工具,使用方法为: jhat -J -Xmx512m [file]
不过jhat没有mat好用,推荐使用mat(Eclipse插件: http://www.eclipse.org/mat ),mat速度更快,而且是图形界面。