几个主要的命令:
jps:与unix上的ps类似,用来显示本地的java进程,可以查看本地运行着几个java程序,并显示他们的进程号。
jstat:一个极强的监视VM内存工具。可以用来监视VM内存内的各种堆和非堆的大小及其内存使用量。
jmap:打印出某个java进程(使用pid)内存内的所有’对象’的情况(如:产生那些对象,及其数量)。
jconsole:一个java GUI监视工具,可以以图表化的形式显示各种数据。并可通过远程连接监视远程的服务器VM。
启动秒杀系统作为测试
1、JPS命令
可以查到当前服务器启动的进程号为2128
C:\Program Files\Java\jdk1.8.0_211\bin>jps
2128 Bootstrap
8720 MyEclipse
23704 QuorumPeerMain
29288 Jps
2、JSTAT命令
此命令可以用来查看加载class的数量级占用的空间
C:\Program Files\Java\jdk1.8.0_211\bin>jstat -class 2128
Loaded Bytes Unloaded Bytes Time
21627 40737.3 0 0.0 17.63
此命令可以用来产看jvn编译的数量信息
C:\Program Files\Java\jdk1.8.0_211\bin>jstat -compiler 2128
Compiled Failed Invalid Time FailedType FailedMethod
10344 3 0 45.47 1 org/springframework/beans/GenericTypeAwarePropertyDescriptor
此命令可以用来查看GC的信息和GC的次数
C:\Program Files\Java\jdk1.8.0_211\bin>jstat -gc 2128
S0C S1C S0U S1U EC EU OC OU MC MU CCSC CCSU YGC YGCT FGC FGCT GCT
512.0 1024.0 384.0 0.0 133120.0 74622.8 163840.0 71196.1 119792.0 117433.6 14896.0 14580.7 116 0.763 4 0.332 1.095
此命令可以用来产看young,old和perm区的对象和使用大小
C:\Program Files\Java\jdk1.8.0_211\bin>jstat -gccapacity 2128
NGCMN NGCMX NGC S0C S1C EC OGCMN OGCMX OGC OC MCMN MCMX MC CCSMN CCSMX CCSC YGC FGC
43520.0 689152.0 235008.0 512.0 512.0 121856.0 87552.0 1379328.0 163840.0 163840.0 0.0 1155072.0 119792.0 0.0 1048576.0 14896.0 227 4
此命令可以用来查看当前VM执行信息
C:\Program Files\Java\jdk1.8.0_211\bin>jstat -printcompilation 2128
Compiled Size Type Method
10468 2 1 java/nio/DirectByteBuffer isDirect
3、jinfo 可以用来查看和更改java进程运行的参数
4、jmap命令可以用来查看堆中的活动对象及大小
C:\Program Files\Java\jdk1.8.0_211\bin>jmap -heap 2128
Attaching to process ID 2128, please wait...
Debugger attached successfully.
Client compiler detected.
using thread-local object allocation.
Mark Sweep Compact GC
Heap Configuration:
MinHeapFreeRatio = 40
MaxHeapFreeRatio = 70
MaxHeapSize = 268435456 (256.0MB)
NewSize = 1048576 (1.0MB)
MaxNewSize = 4294901760 (4095.9375MB)
OldSize = 4194304 (4.0MB)
NewRatio = 2
SurvivorRatio = 8
PermSize = 12582912 (12.0MB)
MaxPermSize = 67108864 (64.0MB)
G1HeapRegionSize = 0 (0.0MB)
Heap Usage:
New Generation (Eden + 1 Survivor Space):
capacity = 36700160 (35.0MB)
used = 4734920 (4.515571594238281MB)
free = 31965240 (30.48442840576172MB)
12.901633126395089% used
Eden Space:
capacity = 32636928 (31.125MB)
used = 4734920 (4.515571594238281MB)
free = 27902008 (26.60942840576172MB)
14.50786054373745% used
From Space:
capacity = 4063232 (3.875MB)
used = 0 (0.0MB)
free = 4063232 (3.875MB)
0.0% used
To Space:
capacity = 4063232 (3.875MB)
used = 0 (0.0MB)
free = 4063232 (3.875MB)
0.0% used
tenured generation:
capacity = 81498112 (77.72265625MB)
used = 30978160 (29.543075561523438MB)
free = 50519952 (48.17958068847656MB)
38.0108928167563% used
Perm Generation:
capacity = 39059456 (37.25MB)
used = 38951352 (37.14690399169922MB)
free = 108104 (0.10309600830078125MB)
99.72323219248112% used
22804 interned Strings occupying 2668488 bytes.
5、jconsole工具
输入jconsole后出现jconsole的界面
其中内存分区如下说明,
Eden Space (heap): 内存最初从这个线程池分配给大部分对象。
Survivor Space (heap):用于保存在eden space内存池中经过垃圾回收后没有被回收的对象。
Tenured Generation (heap):用于保持已经在 survivor space内存池中存在了一段时间的对象。
Permanent Generation (non-heap): 保存虚拟机自己的静态(refective)数据,例如类(class)和方法(method)对象。Java虚拟机共享这些类数据。这个区域被分割为只读的和只写的,
Code Cache (non-heap):HotSpot Java虚拟机包括一个用于编译和保存本地代码(native code)的内存,叫做“代码缓存区”(code cache)
6、jstack命令
此命令用来查看进程下jvm的运行状态
C:\Program Files\Java\jdk1.8.0_211\bin>jstack 2128
7、工具
bin目录下提供了多种工具来监控jvm的运行运行状态,能通过图示很好的进行监控以便进行问题排查和优化
参考文档:http://boendev.iteye.com/blog/882479