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/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

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





