关键词
jvm
内存分析
线程分析
jps
jstat
jinfo
jmap
jstack
在实际工作中,遇到jvm相关问题时,我们需要一些手段来查看jvm进程的一些状态。下面总结一下常用的几个命令及作用。
jps
jps
命令主要那个用来快速查看当前系统启动的jvm进程。其结果如下所示,其中通过 -l
可以进一步展示启动类的全路径,-v
可以查看jvm启动时的相关启动参数。
7616 Jps
2626 Launcher
2629 DemoApplication
2006 Main
2183 RemoteMavenServer36
jstat
jstat
主要用来监视jvm'的类加载、内存使用、垃圾回收及JIT编译信息的内容。
使用方式为 jstat -<option> pid
常用的选项包括:
option | 作用 |
---|---|
-class |
类加载、卸载数量以及耗时情况 |
-gc /-gcutil /... |
展示jvm堆内存的使用情况信息 |
-compiler |
输出被JIT编译器编译过的方、法耗时 |
jstat -gc 11724
S0C S1C S0U S1U EC EU OC OU MC MU CCSC CCSU YGC YGCT FGC FGCT GCT
10240.0 10240.0 0.0 0.0 129024.0 109282.0 98816.0 5636.6 21296.0 20491.3 2944.0 2749.2 3 0.021 1 0.035 0.056
jinfo
jinfo
用于查看jvm中的各项配置参数,jps的-v
选项可以展示被显式指定的启动参数。而该命令可以查看其他默认的系统参数。
查用的命令格式包括:
jinfo -flags pid
java -XX:+PrintFlagsFinal -version
jinfo -flags 4947
Attaching to process ID 4947, please wait...
Debugger attached successfully.
Server compiler detected.
JVM version is 25.102-b14
Non-default VM flags: -XX:-BytecodeVerificationLocal -XX:-BytecodeVerificationRemote -XX:CICompilerCount=4 -XX:InitialHeapSize=268435456 -XX:+ManagementServer -XX:MaxHeapSize=4294967296 -XX:MaxNewSize=1431306240 -XX:MinHeapDeltaBytes=524288 -XX:NewSize=89128960 -XX:OldSize=179306496 -XX:TieredStopAtLevel=1 -XX:+UseCompressedClassPointers -XX:+UseCompressedOops -XX:+UseFastUnorderedTimeStamps -XX:+UseParallelGC
Command line: -XX:TieredStopAtLevel=1 -Xverify:none -Dspring.output.ansi.enabled=always -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=55176 -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false -Dspring.liveBeansView.mbeanDomain -Dspring.application.admin.enabled=true -javaagent:/Applications/IntelliJ IDEA.app/Contents/lib/idea_rt.jar=55177:/Applications/IntelliJ IDEA.app/Contents/bin -Dfile.encoding=UTF-8
jmap
如果说jstat可以对内存使用进行宏观观察,那jmap则是用来对内存里的数据进行细致观察的。
jmap
常用的option包括:
option | 说明 |
---|---|
-dump |
我们常说的生成堆内存快照dump文件,格式一般是 -dump:format=b,file=xxx pid 。然后借助一些其他工具如jhat、MAT进行分析。 |
-histo |
输出当前内存中各对象的数量、空间占用情况 |
-heap |
用来展示堆内存的垃圾回收期信息、堆内存各分代状态。 |
jhat
用来对上文提到的dump文件进行数据分析的工具,其他常用的工具有MAT
(eclipse memory analyzer tool)。
jstack
jstack
命令关注的jvm里线程的状态,通过jack将线程快照dump下来,就能够分析各个线程所处的状态,比如是否阻塞、等待资源。
其中通过-F
可以强制输出线程堆栈,而不去优先响应请求。-l
可以附加展示锁的相关信息。
除了上述的常用命令,jvm也提供了如jConsole
、jvisualvm
等可视化工具,这些工具也可以查看内存、线程等相关jvm数据。读者可以自己去探索一下。
网友评论