查看java程序堆内存等命令和jvm可视化工具

几个主要的命令:
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的界面
查看java程序堆内存等命令和jvm可视化工具_第1张图片查看java程序堆内存等命令和jvm可视化工具_第2张图片
其中内存分区如下说明,

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的运行运行状态,能通过图示很好的进行监控以便进行问题排查和优化

jvisualvm.exe
查看java程序堆内存等命令和jvm可视化工具_第3张图片


jmc.exe
查看java程序堆内存等命令和jvm可视化工具_第4张图片

参考文档:http://boendev.iteye.com/blog/882479

你可能感兴趣的:(Java,java,jvm,jdk)