一、 jps 命令
1.1 jps介绍
jps(JVM Process Status Tool) 列出Java进程,显示指定系统内所有的HotSpot虚拟机进程。
查询Linux系统当前所有java进程pid的命令,并可通过opt来查看这些进程的详细启动参数。
1.1 jps命令格式
jps [options] [hostid] jps -l -m -v
[options] 选项
-q:仅输出VM标识符,不包括classname,jar name,arguments in main method
-m:输出main method的参数,输出传递给Java进程的参数
-l:输出完全的包名,应用主类名,jar的完全路径名 ,输出主函数的完整路径
-v:输出jvm参数 ,显示传递给jvm的参数
-V:输出通过flag文件传递到JVM中的参数(.hotspotrc文件或-XX:Flags=所指定的文件
-Joption:传递参数到vm,例如:-J-Xms512m
31427 sun.tools.jps.Jps -l -m -v -Dapplication.home=/Library/Java/JavaVirtualMachines/jdk1.7.0_55.jdk/Contents/Home -Xms8m
1.2 sudo jps -l
查询Linux系统当前所有java进程pid的命令,并可通过opt来查看这些进程的详细启动参数。
二、top命令
1.2 top命令介绍
top命令是linux系统常用命令之一,能够实时显示系统各个进程的资源占用情况,类似于windows系统的任务管理器。注意:top命令监控的最小单位是进程,如果想监控更小单位时,就需要用到ps或者netstate命令来满足要求。
三、jstack命令
3.1 jstack介绍
jstack用于生成java虚拟机当前时刻的线程快照。jstack来查看各个线程的调用堆栈,就可以知道没有响应的线程到底在后台做什么事情,或者等待什么资源。如果java程序崩溃生成core文件,jstack工具可以用来获得core文件的java stack和native stack的信息,从而可以轻松地知道java程序是如何崩溃和在程序何处发生问题。
sudo jstacksudo jstack 149319sudo jstack 149319 > dmp.stack
主要用于打印指定Java进程、核心文件或远程调试服务器的Java线程的Java堆栈跟踪信息。可以生成JVM当前时刻的线程快照。
3.2 线程快照介绍
线程快照是当前JVM内每一条线程正在执行的方法堆栈的集合。
生成线程快照有利于:
定位线程出现长时间停顿的原因,如线程间死锁、死循环、请求外部资源导致的长时间等待等。
3.3 jstack使用过程中注意事项
(1)如何崩溃How和何处崩溃Where
如果java程序崩溃生成core文件,用来获得core文件的java stack和native stack的信息,从而获取程序是如何崩溃How和何处崩溃Where。
(2)指定-J-d64选项
当指定的进程在64位Java虚拟机上运行时,可能需要指定-J-d64选项
例如:jstack -J-d64 -m pid。
该命令可能在未来的版本中不可用!!!
(2) 组合grep命令使用
结合 grep搜索命令,实现对dmp文件进行快速查询
487 sudo jps488 sudo jstack 202498 > fm200.stack503 grep '^"' fm200.stack |wc496 grep '^"nio' fm200.stack498 grep '^"GC' fm200.stack499 grep '^"GC' -A 5 fm200.stack500 grep '^"nio' fm200.stack479 sudo jstack 16156 > dmp.stack480 more dmp.stack481 grep '^"' dmp.stack482 grep '^nio"' dmp.stack
四、jstat命令
4.1 jstat命令介绍
jstat(JVM statistics Monitoring)是用于监视虚拟机运行时状态信息的命令
它的功能非常强大 :
显示出虚拟机进程中的类装载、内存、垃圾收集、JIT编译等运行数据。观察Java应用程序运行时信息的工具,查看线程当前状态导出Java应用程序的线程堆栈信息,查看堆信息的详细情况,调用栈,锁等线程栈信息检测死锁
4.2 jstat命令基本使用方法
jstat -<option> [-t] [-h<lines>] <vmid> [<interval> [<count>]]
【最常用参数】jstat -gcutil pid:统计gc信息统计。
jstat -class pid:显示加载class的数量,及所占空间等信息。
jstat -compiler pid:显示VM实时编译的数量等信息。
jstat -gcnew pid:new对象的信息。
jstat -gcold pid:old对象的信息。
jstat -gcnewcapacity pid:new对象的信息及其占用量。
jstat -gcoldcapacity pid:old对象的信息及其占用量。
jstat -gcpermcapacity pid: perm对象的信息及其占用量。
jstat -printcompilation pid:当前VM执行的信息。
jstat -printcompilation 3024 250 6是每250毫秒打印一次,一共打印6次。
jstat -gc pid:可以显示gc的信息,查看gc的次数,及时间。
其中最后五项,分别是young gc的次数,young gc的时间,full gc的次数,full gc的时间,gc的总时间。
jstat -gccapacity:可以显示,VM内存中三代(young,old,perm)对象的使用和占用大小,
PGCMN显示的是最小perm的内存使用量
PGCMX显示的是perm的内存最大使用量
PGC是当前新生成的perm内存占用量
PC是但前perm内存占用量。其他的可以根据这个类推,
OC是old内纯的占用量。
五、jinfo命令
5.1 jinfo命令介绍
查看正在运行的Java应用程序的扩展参数,甚至在运行时修改部分参数
5.2 jinfo命令基本语法
jinfo <option> <pid> 查看运行时参数
在运行时,修改参数值:
jinfo -flag MaxTenuringThreshold 31518 -XX:MaxTenuringThreshold=15jinfo -flag PrintGCDetails 31518 -XX:-PrintGCDetailsjinfo -flag +PrintGCDetails 31518jinfo -flag PrintGCDetails 31518 -XX:+PrintGCDetails
六、jmap命令
6.1 jmap命令介绍
jmap(JVM Memory Map)命令用于生成heap dump文件(生成堆快照文件),如果不使用这个命令,还阔以使用-XX:+HeapDumpOnOutOfMemoryError参数来让虚拟机出现OOM的时候·自动生成dump文件。jmap不仅能生成dump文件,还阔以查询finalize执行队列、Java堆和永久代的详细信息,如当前使用率、当前使用的是哪种收集器等。
6.2 jmap命令使用
> jmap -dump:format=b,file=heap.hprof 31531Dumping heap to /Users/caojie/heap.hprof ...Heap dump file created
获得堆快照文件之后,可使用多种工具对文件进行分析,例如jhat,VisualVM等。
试试用jconsole或者VisualVM监控另一个jvm的状态。
用profiling工具寻找程序中慢的地方。Eclipse有profiling工具。VisualVM也有这样的功能。
(如果不介意使用闭源软件的话,也试试JProfiler和YourKit)
七、jhat命令
7.1 jhat命令介绍
jhat(JVM Heap Analysis Tool)命令是与jmap搭配使用,用来分析jmap生成的dump(分析Java应用程序的堆快照文件),jhat内置了一个微型的HTTP/HTML服务器,生成dump的分析结果后,可以在浏览器中查看。在此要注意,一般不会直接在服务器上进行分析,因为jhat是一个耗时并且耗费硬件资源的过程,一般把服务器生成的dump文件复制到本地或其他机器上进行分析。
7.2 jhat命令的使用
使用命令如下:
> jhat heap.hprofReading from heap.hprof...Dump file created Tue Nov 11 06:02:05 CST Snapshot read, resolving...Resolving 8781 objects...Chasing references, expect 1 dots.Eliminating duplicate references.Snapshot resolved.Started HTTP server on port 7000Server is ready.
jhat在分析完成之后,使用HTTP服务器展示其分析结果.
在浏览器中访问http://127.0.0.1:7000/
即可得到分析结果。
八、jstatd命令
一个RMI服务器程序
作用相当于代理服务器
建立本地计算机与远程监控工具的通信
jstatd服务器能够将本机的Java应用程序信息传递到远程计算机,由于需要多台计算机做演示,此处略。