记录spring cloud项目线上JVM配置

本文详细解读Linux系统中硬盘和内存的使用情况,包括`df -h`与`free -h`命令的结果,并深入解析启动命令中JVM内存参数如-Xms、-Xmx的设置及其影响。重点讲解了-XX:NewRatio和-XX:SoftRefLRUPolicyMSPerMB的作用。

linux硬盘详情:

# df -h 
Filesystem      Size  Used Avail Use% Mounted on
/dev/vda1        99G   35G   60G  37% /
tmpfs           7.8G     0  7.8G   0% /dev/shm

linux 内存详情:

# free -h
             total       used       free     shared    buffers     cached
Mem:           15G        13G       1.9G       684K       145M        11G
-/+ buffers/cache:       2.2G        13G
Swap:           0B         0B         0B

启动命令:

nohup java -Xms3096M -Xmx3096M -Xss256K -XX:NewRatio=3 -XX:SurvivorRatio=3 -XX:PermSize=256M -XX:MaxPermSize=256M -XX:+UseParNewGC -XX:LargePageSizeInBytes=64M -XX:+UseFastAccessorMethods -XX:SoftRefLRUPolicyMSPerMB=0 -XX:+PrintClassHistogram -XX:+PrintGCDetails -XX:+PrintGCTimeStamps -XX:+PrintHeapAtGC -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false -jar -Dspring.profiles.active=prod  test.jar

启动命令详解:

nohup java 
-Xms3096M  #jvm启动时申请的初始Heap内存
-Xmx3096M  #JVM可申请的最大Heap值
#将-Xms和-Xmx设为相同值,可以避免每次GC后JVM重新分配内存
-Xss256K  #设置每个线程的堆栈大小
-XX:NewRatio=3  #老年代:新生代=1:3
-XX:SurvivorRatio=3 #Eden和1个Suivior的比,例:Eden:from=3:1,则Eden:3/5,from和to为1/5
-XX:PermSize=256M #JVM初始分配的非堆内存
-XX:MaxPermSize=256M #JVM最大允许分配的非堆内存,按需分配
-XX:+UseParNewGC #ParNew收集器是Serial收集器的多线程版本,设置后会在新生代用复制算法并行回收
-XX:LargePageSizeInBytes=64M #单个页大小调整
-XX:+UseFastAccessorMethods #冗余代码优化
-XX:SoftRefLRUPolicyMSPerMB=0 #所有的软引用对象都尽快的被释放
-XX:+PrintClassHistogram #按下Ctrl+Break后,打印类的信息
-XX:+PrintGCDetails #打印GC详细信息
-XX:+PrintGCTimeStamps # 打印CG发生的时间戳
-XX:+PrintHeapAtGC #打印GC堆信息
-Dcom.sun.management.jmxremote #支持JMX远程监控
-Dcom.sun.management.jmxremote.authenticate=false #表示JMX不需要鉴权,主机+port即可监控
-Dcom.sun.management.jmxremote.ssl=false #JMS 连接方式
-jar 
-Dspring.profiles.active=prod  #配置文件选择prod
test.jar

-Xms和-Xmx 详解:

(1)这两个参数老是搞混,特地记一下。-Xms 为JVM启动时申请的初始Heap值,默认为操作系统物理内存的1/64但小于1G。默认当空余堆内存大于70%时,JVM会减小heap的大小到-Xms指定的大小,可通过-XX:MaxHeapFreeRation来指定这个比列。

(2)-Xmx 为JVM运行时可申请的最大Heap值,默认值为物理内存的1/4但小于1G,默认当空余堆内存小于40%时,JVM会增大Heap到-Xmx指定的大小,可通过-XX:MinHeapFreeRation来指定这个比列。

(3)关于这两个参数前的-X在JVM中的参数表示为非标准参数,不保证所有的JVM会实现,不保证向后兼容,此外还有,标准参数(-),保证JVM都会实现的参数且向后兼容,非Stable(稳定)参数(-XX),各个JVM实现可能不同且将来可能取消。

(4)程序启动时有时会遇到内存不够的类似异常,可以通过ide在运行程序时改变这两个参数的值。

(5)关于这个两个参数的关系如下图:
在这里插入图片描述

(6)为了避免每次GC后JVM重新分配内存,JVM可将-Xms和-Xmx设为相同值

-XX:NewRatio=3
设置Yong 和 Old的比例,比如值为3,则Old Generation是 Yong Generation的3倍,即Yong Generation占据内存的1/4
在这里插入图片描述

-XX:SoftRefLRUPolicyMSPerMB

对于软引用对象,只要堆内存不够了,该对象就会被回收来释放空间。不过这只是理论,软引用对象能够被回收需要满足一定的逻辑判断,判断公式如下:

clock - timestamp <= freespace * SoftRefLRUPolicyMSPerMB
  • clock表示上次GC的时间戳,
  • timestamp表示最近一次读取软引用对象的时间戳,这两者的差值表示该软引用对象多久没被使用了,差值越大,软引用对象价值越低,负数则表示软引用对象刚刚被使用。
  • freespace是空闲空间大小,
  • SoftRefLRUPolicyMSPerMB表示每一MB的空闲内存空间可以允许软引用对象存活多久,
  • 这也就间接的解释了,为什么空间不够用,空闲空间越小,软应用对象就会被回收,因为它的存活时间会随着空闲空间的减小而递减。可以把 【freespace * SoftRefLRUPolicyMSPerMB】理解为忍耐度,对软应用对象的忍耐程度。

所以如果clock - timestamp <= freespace * SoftRefLRUPolicyMSPerMB成立,那么软引用对象就不会被回收,反之则需要回收该软引用对象。

顾名思义,【-XX:SoftRefLRUPolicyMSPerMB】参数能够影响的就是SoftRefLRUPolicyMSPerMB的数值,如果调整为0,表示0忍耐度,所有的软引用对象都要尽快的被释放。

参考:
https://blog.youkuaiyun.com/u010833547/article/details/90289325

https://blog.youkuaiyun.com/weixin_38106322/article/details/109166228?utm_medium=distribute.pc_relevant.none-task-blog-baidujs_title-2&spm=1001.2101.3001.4242

https://blog.youkuaiyun.com/qiang_zi_/article/details/100700784

-XX:+PrintClassHistogram

–按下Ctrl+Break后,打印类的信息:

 num     #instances         #bytes  class name

----------------------------------------------

   1:        890617      470266000  [B

   2:        890643       21375432  java.util.HashMap$Node

   3:        890608       14249728  java.lang.Long

   4:            13        8389712  [Ljava.util.HashMap$Node;

   5:          2062         371680  [C

   6:           463          41904  java.lang.Class

–分别显示:序号、实例数量、总大小、类型

-Dcom.sun.management.jmxremote

https://www.cnblogs.com/liu-ke/p/7008920.html

https://blog.youkuaiyun.com/qq_27641935/article/details/102919542

https://www.cnblogs.com/gossip/p/6141941.html

评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值