JVM 调整和优化

1. window 系统需要到jdk 安装目录下,到 bin 下面:执行相关命令                  输入: jvisualvm 可打开图形界面

(查看指定端口pid:   netstat -aon|findstr "10000"   查看指定pid进程:   tasklist|findstr "10116"    )

     

 2.  相关指令

jconsole 监控  https://www.jianshu.com/p/d1a78568b9d7

 

 1)  jmap-->java 内存映射工具

jmap命令用于生产堆转存快照。打印出某个java进程(使用pid)内存内的,所有‘对象’的情况(如:产生那些对象,及其数量)。

jmap [ option ] pid
jmap [ option ] executable core
jmap [ option ] [server-id@]remote-hostname-or-IP
参数选项: -dump:[live,]format=b,file=
<filename> 使用hprof二进制形式,输出jvm的heap内容到文件。live子选项是可选的,假如指定live选项,那么只输出活的对象到文件。 -finalizerinfo 打印正等候回收的对象的信息。 -heap 打印heap的概要信息,GC使用的算法,heap的配置及wise heap的使用情况。 -histo[:live] 打印每个class的实例数目、内存占用、类全名信息。VM的内部类名字开头会加上前缀”*”。如果live子参数加上后,只统计活的对象数量。 -permstat 打印classload和jvm heap长久层的信息,包含每个classloader的名字、活泼性、地址、父classloader和加载的class数量。另外,内部String的数量和占用内存数也会打印出来。 -F 强迫。在pid没有相应的时候,使用-dump或者-histo参数。在这个模式下,live子参数无效。 -h | -help 打印辅助信息。 -J 传递参数给jmap启动的jvm。

使用jmap -heap pid查看进程堆内存使用情况,包括使用的GC算法、堆配置参数和各代中堆内存使用情况:

相关参数: 

1、

MinHeapFreeRatio = 40   #空闲堆空间的最小百分比,计算公式为:HeapFreeRatio =(CurrentFreeHeapSize/CurrentTotalHeapSize) * 100,值的区间为0到100,默认值为 40。如果HeapFreeRatio < MinHeapFreeRatio,则需要进行堆扩容,扩容的时机应该在每次垃圾回收之后。
MaxHeapFreeRatio = 70   #空闲堆空间的最大百分比,计算公式为:HeapFreeRatio =(CurrentFreeHeapSize/CurrentTotalHeapSize) * 100,值的区间为0到100,默认值为 70。如果HeapFreeRatio > MaxHeapFreeRatio,则需要进行堆缩容,缩容的时机应该在每次垃圾回收之后。
MaxHeapSize = 4294967296 (4096.0MB)                  #JVM 堆空间允许的最大值。
NewSize = 1363144 (1.2999954223632812MB)             #JVM 新生代堆空间的默认值。
MaxNewSize = 2576351232 (2457.0MB)                   #JVM 新生代堆空间允许的最大值。
OldSize = 5452592 (5.1999969482421875MB)             #JVM 老年代堆空间的默认值。    
NewRatio = 2                                         #新生代(2个Survivor区和Eden区 )与老年代(不包括永久区)的堆空间比值,表示新生代:老年代=1:2。
SurvivorRatio = 8                                    #两个Survivor区和Eden区的堆空间比值为 8,表示 S0 : S1 :Eden = 1:1:8。
MetaspaceSize = 21807104 (20.796875MB)               #JVM 元空间的默认值。
CompressedClassSpaceSize = 1073741824 (1024.0MB)
MaxMetaspaceSize = 17592186044415 MB                 #JVM 元空间允许的最大值。
G1HeapRegionSize = 1048576 (2.0MB) #在使用 G1 垃圾回收算法时,JVM 会将 Heap 空间分隔为若干个 Region,该参数用来指定每个 Region 空间的大小。

 2、

G1 的 Heap 使用情况,该 Heap 包含 4012 个 Region,结合上文每个 RegionSize=2M,因此 Capacity = Regions * RegionSize = 4096 * 2M = 8024M,已使用空间为 1743M,空闲空间为 4091M,使用率为 21%。

G1 的 Eden 区的使用情况,总共使用了 120 个 Region,结合上文每个 RegionSize=2M,因此 Used = Regions * RegionSize =120 * 2M = 240M,Capacity=422M表名当前 Eden 空间分配了 210 个 Region,使用率为 56%。
   

G1 的 Survivor 区的使用情况,同 Eden区。

 G1 的 老年代的使用情况,同 Eden区。

二、 jcmd 命令

https://zhuanlan.zhihu.com/p/548017675

 jcmd 4608 VM.native_memory

输出线程信息到文本: jstack 5684 >tempth.txt

 

 

 

 

 

 

posted @ 2023-01-10 09:44  leolzi  阅读(41)  评论(0编辑  收藏  举报