记录spring cloud项目线上JVM配置
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 -htotal 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.csdn.net/u010833547/article/details/90289325
https://blog.csdn.net/weixin_38106322/article/details/109166228?utm_medium=distribute.pc_relevant.none-task-blog-baidujs_title-2&spm=1001.2101.3001.4242
https://blog.csdn.net/qiang_zi_/article/details/100700784
-XX:+PrintClassHistogram
–按下Ctrl+Break后,打印类的信息:
num #instances #bytes class name----------------------------------------------1: 890617 470266000 [B2: 890643 21375432 java.util.HashMap$Node3: 890608 14249728 java.lang.Long4: 13 8389712 [Ljava.util.HashMap$Node;5: 2062 371680 [C6: 463 41904 java.lang.Class
–分别显示:序号、实例数量、总大小、类型
-Dcom.sun.management.jmxremote
https://www.cnblogs.com/liu-ke/p/7008920.html
https://blog.csdn.net/qq_27641935/article/details/102919542
https://www.cnblogs.com/gossip/p/6141941.html
记录spring cloud项目线上JVM配置相关推荐
- Spring Cloud落地之Spring Cloud LoadBalancer 线上优化方案
文章目录 Spring Cloud 版本 注册中心 Spring Cloud LoadBalancer 负载均衡器新的选择 缓存问题 解决方式 总结 这里是weihubeats,觉得文章不错可以关注公 ...
- Linux中部署Spring Cloud项目
Linux中部署Spring Cloud项目 文章为本人在学习的过程中,记录部署过程,仅供参考学习.因本人经验不足,教程或有不妥之处,还望指正. 保姆级教程,敬请食用!!! 简介 在学习过程中,部署时 ...
- 告诉老默我想学Spring Cloud了(新手篇):从0到1搭建Spring Cloud项目(实际项目开发的浓缩精华版)
告诉老默我想学Spring Cloud了(新手篇):从0到1搭建Spring Cloud项目 一.前言 二.如何选择版本 2.1 SpringCloud 和 Spring Boot 版本选型 2.1. ...
- 面试两连击:线上JVM GC问题和OOM内存溢出的解决方案,聊聊呗!
点击上方石杉的架构笔记,右上角选择"设为星标" 每日早8点半,技术文章准时送上 公众号后台回复"学习",获取作者独家秘制精品资料 往期文章 BAT 面试官是如何 ...
- Spring Cloud第六章:配置中心Config
在上一篇文章讲述zuul的时候,已经提到过,使用配置服务来保存各个服务的配置文件.它就是Spring Cloud Config. 一.简介 在分布式系统中,由于服务数量巨多,为了方便服务配置文件统一管 ...
- 为Spring Cloud Config插上管理的翅膀
最近一致在更新Spring Cloud Config的相关内容,主要也是为这篇埋个伏笔,相信不少调研过Spring Cloud Config的用户都会吐槽它的管理能力太弱.因此,就有了下面为讲推荐的这 ...
- 在运行时在Spring Cloud Config中刷新属性配置
在本系列Spring Cloud Config的教程系列中,我们将讨论在运行时刷新属性配置的过程,我们将使用Spring Boot致动器/refresh端点进行/refresh . 此外,我们还将研究 ...
- Spring Cloud整合Nacos实现动态配置
前提 已经安装并启动了nacos-server服务端. 整合 创建一个maven工程并引入以下依赖: <dependency><groupId>org.springframew ...
- Spring Cloud(七):配置中心
Spring Cloud Config项目是一个解决分布式系统的配置管理方案.它包含了Client和Server两个部分,server提供配置文件的存储.以接口的形式将配置文件的内容提供出去,clie ...
最新文章
- AD-NeRF:用于说话人头部合成的音频驱动神经辐射场
- LFD-A-Light-and-Fast-Detector
- 腾讯云,搭建Docker环境
- 与python相关的爬虫工具_python爬虫常用工具集合
- python入门第一课_入门第一课 Python入门涉及的问题及简单示例
- PHP-计算表单提交的数据
- 单体模式singleton
- boost::container模块实现比较的程序
- 设计模式的Java 8 Lambda表达式–装饰器设计模式
- 移动端判断手机横竖屏状态
- HYSBZ - 2157树链剖分
- android 模糊查询控件_第三十二篇:在SOUI2.0中像android一样使用资源
- idea退出首界面_如何取消Idea开始界面打开默认项目配置
- java 集合操作工具包_java之操作集合的工具类--Collections
- 解决非javascript浏览器的问题
- karto探秘之open_karto 第二章 --- 参数解析
- 手機短信阻擊中國化工項目
- uni 登录token方法_uniapp如何检验用户是否登录
- RMI 自己创建的 过程
- 网络工程师(软考)心得