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速度更快,而且是图形界面。