JVM性能调优之JVM监控及诊断工具的命令行使用
- jps:查看当前正在运行的java进程
(1)基本情况 jps显示指定系统内所有的HotSpot虚拟机进程,用于查看运行的进程,对于本地虚拟机进程来说,进程的本地虚拟机ID与操作系统的进程ID一致 (2)使用情况:jps [option参数][[hostid参数] option参数: ① -q:显示进程的ID ② -l:显示全类名 ③ -m:输出虚拟机进程启动时传递给main()的参数 ④ -v:列出虚拟机进程启动时的JVM参数 hostid参数:RMI注册表中的主机名 - jstat:查看JVM统计信息
(1)基本情况 jstat用于监视虚拟机各种运行状态信息的命令行工具。可以显示本地或远程虚拟机进程中的类装载,内存,垃圾收集,JIT编译等运行数据。 (2)基本使用 注意顺序
jstat -<option> [-t] [-h<lines>] <vmid> [<interval> [<count>]]
① interval参数:用于指定输出统计数据的周期 ② count参数:用于指定查询的总次数 ③ -t参数:用于显示程序的运行时间,单位是秒 ④ -h参数:在输出多少行数据后输出一个表头信息  ⑤ option参数 类装载相关的: -class参数:显示ClassLoader的相关信息:类的装载,卸载数量,总空间,类装载所消耗的时间等 JTI相关的: -compiler:显示JIT编译器编译过的方法耗时等信息 -printcompilation:输出已经被JIT编译的方法 垃圾回收相关的: -gc:显示与GC相关的堆信息,包括Eden区,两个Survivor区,老年代,永久代等的容量,已用空间,GC时间合计等信息 -gccapacity:显示内存与-gc基本相同,但输出主要关注Java堆各个区域使用到的最大最小空间 -gcutil:显示内容与-gc基本相同,但输出关注已使用空间占总空间的百分比 -gccause:与-gcutil功能一样,但会额外输出导致最后一次或当前正在发生的GC产生的原因 -gcnew:显示新生代GC状况 -gcnewcapcity:显示内存与-gcnew基本相同,输出主要关注使用到的最大最小空间 -geold:显示老年代GC状况 -gcoldcapacity:显示内存与-gcold基本相同,但输出主要关注使用到的最大最小空间 -gcpermcapacity:显示永久代用到的最大最小空间 3. jinfo:查看并修改JVM配置参数 (1)基本介绍 查看虚拟机配置参数信息,也可用于调整虚拟机的配置参数 (2)基本使用 语法:jinfo [option] pid,Java进程的ID必须带上 ① jinfo -sysprops PID:查看有System.getProperties()取得的参数 ② jinfo -flags PID:查看曾经赋值过的一些参数 ③ jinfo -flag 具体参数 PID:查看某个进程的具体参数值 ④ jinfo -flag +或- 具体参数 PID:修改某个进程的具体参数值 ⑤ 对于非boolean类型的,jinfo -flag 具体参数=具体参数值 PID (3)扩展 ① java -XX +PrintFlagsInitial:查看所有JVM参数启动的初始值 ② java -XX +PrintFlagsFinal:查看所有JVM参数的最终值 ③ java -XX +PrintCommandLineFlags:查看那些已经被用户或JVM设置过的详细的xx参数的名称和值 4. jmap:导出内存映像文件以及内存使用情况 (1)基本介绍 一方面是获取dump文件(堆转储快照文件,二进制文件),另一方面获取目标Java进程的内存相关信息,包括Java堆各个区域的使用情况,堆中对象的统计信息以及类加载信息等 (2)基本语法
jmap [option] <pid>
jmap [option] <executable <core>
jmap [option] [server_id@]<remote server IP or hostname>
option选项: ① -dump:生成Java堆转储快照文件,其中-dump:live只保存堆中的存活对象 ② -heap:输出整个堆空间的详细信息,包括GC的使用,堆配置信息以及内存的使用情况等 ③ -histo:输出堆中对象的统计信息,包括类,实例数量和合计容量,其中-histo:live只统计堆中的存活对象 ④ -permstat:以ClassLoader为统计口径输出永久代的内存状态信息 ⑤ -finalizerinfo:显示在F-Queue中等待Finalizer线程执行fianlize方法的对象 ⑥ -F:当虚拟机进程对-dump选项没有任何响应时,可使用此选项强制执行生成dump文件 ⑦ -J <`flag>:传递参数给jmap启动的jvm (3)具体使用 ① 导出内存映像文件 手动的方式
jmap -dump:format=b,file=<文件名.hprof> pid
jmap -dump:live,format=b,file=<文件名.hprof> pid
自动的方式 在程序出现OOM异常时,导出应用程序的当前堆快照
-XX:+HeapDumpOnOutOfMemoryError
-XX:+HeapDumpPath=<文件名.hprof>
例如:-Xmx100m -XX:+HeapDumpOnOutOfMemoryError -XX:+HeapDumpPath=D:\m.hprof
② 显示堆内存相关信息 jmap -heap pid jamp -histo pid ③ 其他作用 jamp -permstat pid 查看系统的ClassLoader信息 jamp -finalizerinfo 查看堆积在finalizer队列中的对象 5. jhat:JDK自带堆分析工具 (1)基本介绍 与命令jmap搭配使用,用于分析jmap生成的heap dump文件,其内置了一个微型的HTTP/HTML服务器,生成dump文件的分析结果后,用户可以在浏览器中查看分析结果,浏览器查看地址是http://localhost:7000/ (2)基本使用 jhat 文件路径(jmap命令的文件路径) 相关参数  6. jstack:打印JVM线程快照 (1)基本介绍 用于生成虚拟机指定进程当前时刻的线程快照,线程快照就是当前虚拟机内指定进程的每一条线程正在执行的方法堆栈的集合。 在thread dump,要留意下面几种状态 ① 死锁:Deadlock ② 等待资源,Wating on condition ③ 等待获取监视器,Waiting on monitor entry ④ 阻塞,Blocked ⑤ 执行中,Runnable ⑥ 暂停,Suspended ⑦ 对象等待中,Object.wait() ⑧ 停止,Parked (2)基本使用 jstack [option] pid option选项  7. jcmd:多功能命令行工具 (1)基本介绍 是一个多功能的工具,可以用来实现前面除了jstat之外的所有命令的功能 (2)基本使用 ① jcmd -l:列出所有的JVM进程 ② jcmd pid help:针对指定的进程,列出支持的所有命令 ③ jcmd pid 具体命令:显示指定进程的指令命令的数据,具体指令来自于help显示的 8. jstatd:远程主机信息收集 该命令是一个RMI服务端程序,相当于代理服务器,建立本地计算机与远程监控工具的通信,jstatd服务器将本机的Java引用程序信息传递到远程计算机
|