查看java进程的启动参数

# jcmd 27876 VM.flags

得到以下结果

27876:
-XX:CICompilerCount=3 -XX:InitialHeapSize=264241152 -XX:MaxHeapSize=4208984064 -XX:MaxNewSize=1402994688 -XX:MinHeapDeltaBytes=524288 -XX:NewSize=88080384 -XX:OldSize=176160768 -XX:+UseCompressedClassPointers -XX:+UseCompressedOops -XX:+UseParallelGC

打印堆概要信息

# jmap -heap 27876

得到以下结果

Attaching to process ID 27876, please wait...
Debugger attached successfully.
Server compiler detected.
JVM version is 25.171-b11

using thread-local object allocation.
Parallel GC with 4 thread(s)

Heap Configuration:
MinHeapFreeRatio = 0
MaxHeapFreeRatio = 100
MaxHeapSize = 4208984064 (4014.0MB)
NewSize = 88080384 (84.0MB)
MaxNewSize = 1402994688 (1338.0MB)
OldSize = 176160768 (168.0MB)
NewRatio = 2
SurvivorRatio = 8
MetaspaceSize = 21807104 (20.796875MB)
CompressedClassSpaceSize = 1073741824 (1024.0MB)
MaxMetaspaceSize = 17592186044415 MB
G1HeapRegionSize = 0 (0.0MB)

Heap Usage:
PS Young Generation
Eden Space:
capacity = 706215936 (673.5MB)
used = 53656856 (51.171165466308594MB)
free = 652559080 (622.3288345336914MB)
7.597797396630823% used
From Space:
capacity = 3670016 (3.5MB)
used = 0 (0.0MB)
free = 3670016 (3.5MB)
0.0% used
To Space:
capacity = 20447232 (19.5MB)
used = 0 (0.0MB)
free = 20447232 (19.5MB)
0.0% used
PS Old Generation
capacity = 282066944 (269.0MB)
used = 40132768 (38.273590087890625MB)
free = 241934176 (230.72640991210938MB)
14.228100404420307% used

26205 interned Strings occupying 3370072 bytes.

查看GC情况

# jstat -gccause 27876 5000 100

参数说明:

字段 说明
gccause 垃圾收集统计概述(同-gcutil),附加最近两次垃圾回收事件的原因。
5000 打印间隔
100 打印次数

得到如下结果:

 S0     S1     E      O      M     CCS    YGC     YGCT    FGC    FGCT     GCT    LGCC                 GCC
0.00 0.00 7.60 14.23 97.49 96.72 16 0.312 4 0.636 0.948 Heap Dump Initiated GC No GC
0.00 0.00 7.60 14.23 97.49 96.72 16 0.312 4 0.636 0.948 Heap Dump Initiated GC No GC
0.00 0.00 7.60 14.23 97.49 96.72 16 0.312 4 0.636 0.948 Heap Dump Initiated GC No GC
0.00 0.00 7.60 14.23 97.49 96.72 16 0.312 4 0.636 0.948 Heap Dump Initiated GC No GC

获取堆信息

# jmap -dump:live,format=b,file=test.hprof 27876

得到一个test.hprof文件,用MAT打开就可以看到堆信息

查看线程信息

# jstack -l 2826|more

参数说明:

字段 说明
F 当正常输出请求不被响应时,强制输出线程堆栈
l 除堆栈外,显示关于锁的附加信息
m 如果调用到本地方法的话,可以显示C/C++的堆栈

查看非堆内存情况

需要在启动时加参数-XX:NativeMemoryTracking=summary -XX:+UnlockDiagnosticVMOptions -XX:+PrintNMTStatistics
注意该参数会导致一定的性能损耗,生产环境不建议使用

java -XX:NativeMemoryTracking=summary -XX:+UnlockDiagnosticVMOptions -XX:+PrintNMTStatistics -jar app.jar

查看非堆内存

jcmd 2826 VM.native_memory summary scale=MB