JVM内存参数的学习之三
JVM内存参数的学习之三
背景
研究启动性能时, 顺便看到了jmap -heap 1 的部分信息
看到:
MinHeapFreeRatio、MaxHeapFreeRatio
自己突然以为是 Percentage的参数, 恍惚了好久.
才发现自己对内存的学习不够, 所以想多学习一下.
参数解释
MinHeapFreeRatio:
空闲堆空间的最小百分比,计算公式为:HeapFreeRatio =(CurrentFreeHeapSize/CurrentTotalHeapSize) * 100,
值的区间为0到100,默认值为 40。如果HeapFreeRatio < MinHeapFreeRatio,则需要进行堆扩容,扩容的时机应该在每次垃圾回收之后。
MaxHeapFreeRatio :
空闲堆空间的最大百分比,计算公式为:HeapFreeRatio =(CurrentFreeHeapSize/CurrentTotalHeapSize) * 100,
值的区间为0到100,默认值为 70。如果HeapFreeRatio > MaxHeapFreeRatio,则需要进行堆缩容,缩容的时机应该在每次垃圾回收之后。
来源:
https://blog.csdn.net/claram/article/details/104635114
参数默认值
如果启动参数为:
"-XX:MaxRAMPercentage=80.0","-XX:MinRAMPercentage=50.0"
参数值应该是默认的:
Heap Configuration:
MinHeapFreeRatio = 40
MaxHeapFreeRatio = 70
MaxHeapSize = 25891438592 (24692.0MB)
NewSize = 169148416 (161.3125MB)
MaxNewSize = 8630435840 (8230.625MB)
OldSize = 338362368 (322.6875MB)
如果关闭自适应的话:
"-XX:-UseAdaptiveSizePolicy","-XX:MaxRAMPercentage=80.0","-XX:MinRAMPercentage=50.0"
发现这个参数值并不会发生变化
Heap Configuration:
MinHeapFreeRatio = 40
MaxHeapFreeRatio = 70
MaxHeapSize = 25891438592 (24692.0MB)
NewSize = 169148416 (161.3125MB)
MaxNewSize = 8630435840 (8230.625MB)
OldSize = 338362368 (322.6875MB)
增加初始化的设置时
"-XX:InitialRAMPercentage=75.0","-XX:MaxRAMPercentage=75.0","-XX:MinRAMPercentage=75.0"
Heap Configuration:
MinHeapFreeRatio = 0
MaxHeapFreeRatio = 100
MaxHeapSize = 22548578304 (21504.0MB)
NewSize = 7516192768 (7168.0MB)
MaxNewSize = 7516192768 (7168.0MB)
OldSize = 15032385536 (14336.0MB)
感觉增加初始化 InitialRAMPercentage 非常管用,会自动分配堆区设置, 并且能够将old区域 固定下来.
如果不设置 InitialRAMPercentage时
"-XX:MaxRAMPercentage=75.0","-XX:MinRAMPercentage=75.0"
Heap Configuration:
MinHeapFreeRatio = 0
MaxHeapFreeRatio = 100
MaxHeapSize = 22548578304 (21504.0MB)
NewSize = 234881024 (224.0MB)
MaxNewSize = 11274289152 (10752.0MB)
OldSize = 234881024 (224.0MB)
但是这个时候内存的分配不是严格的 1:2配比的new和old old区域一开始很小. 感觉这样并不是很优秀.
可以增加几个内存参数对象的变量设置.
"-XX:InitialRAMPercentage=75.0","-XX:MaxRAMPercentage=75.0","-XX:MinRAMPercentage=75.0","-XX:SurvivorRatio=3","-XX:NewRatio=1"
MinHeapFreeRatio = 0
MaxHeapFreeRatio = 100
MaxHeapSize = 22548578304 (21504.0MB)
NewSize = 11274289152 (10752.0MB)
MaxNewSize = 11274289152 (10752.0MB)
OldSize = 11274289152 (10752.0MB)
参数的理解
JVM的参数其实很复杂.
建议还是 最大最小区域保持一致, 这样的话就不会因为 freeMemory的原因
导致堆区被收缩和扩张因为性能衰退.
毕竟操作系统进行内存的收缩和扩展是要耗费资源和时间的.
不改容器内启动脚本实现不同参数的方法
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app: myapp
name: myapp-deployment
namespace: default
spec:
replicas: 1
selector:
matchLabels:
app: myapp
template:
metadata:
labels:
app: myapp
spec:
containers:
- image: myapp:v1.0
ports:
- containerPort: 5200
name: myapp
command: ["java","-Djava.security.egd=file:/dev/./urandom","-Dloader.path=./server/runtime/3rd,./server/runtime/libs","-Dparallel.startup=true","-Dserver.runtime.path.name=server","-XX:+UseContainerSupport","-XX:InitialRAMPercentage=75.0","-XX:MaxRAMPercentage=75.0","-XX:MinRAMPercentage=75.0","-XX:SurvivorRatio=3","-XX:NewRatio=1","-XX:-DisableExplicitGC","-XX:+PrintFlagsFinal","-XX:+PrintGC","-XX:+PrintGCDateStamps","-XX:+PrintGCDetails","-XX:+PrintGCTimeStamps","-Xloggc:/app/dump/gclog","-XX:+HeapDumpOnOutOfMemoryError","-XX:HeapDumpPath=/app/dump","-jar","./server/runtime/caf-bootstrap.jar","--spring.config.location=./server/runtime/"]
resources:
limits:
cpu: 6
memory: 28Gi
requests:
cpu: 6
memory: 28Gi
---
apiVersion: v1
kind: Service
metadata:
labels:
app: myapp
name: myapp-service
namespace: default
spec:
sessionAffinity: ClientIP
ports:
- port: 80
name: myapp-service
protocol: TCP
targetPort: 5200
selector:
app: myapp
type: NodePort
JVM内存参数的学习之三的更多相关文章
- JVM内存参数详解以及配置调优
基本概念:PermGen space:全称是Permanent Generation space.就是说是永久保存的区域,用于存放Class和Meta信息,Class在被Load的时候被放入该区域He ...
- 设置Myeclipse的jvm内存参数
Myeclipse经常会遇到内存溢出和Gc开销过大的情况,这时候就需要修改Myeclipse的Jvm内存参数 修改如下:(使用Extjs做公司大项目时候,不要让项目Builders的Javascrip ...
- 配置Tomcat-8.5 JVM内存参数
配置Tomcat-8.5 JVM内存参数 apache-tomcat-8.5与之前的版本存在些许差异,配置方式有所改变,并且针对JVM一些参数不再支持.故本文档主要简介一下如何在apache-tomc ...
- JVM内存参数( -Xms -Xmx -Xmn -Xss 直接内存)
JVM调优总结 -Xms -Xmx -Xmn -Xss jvm 内存 在不同的情况下如何增大 及 PermGen space 相关 JVM日志和参数的理解 JVM崩溃Log日志分析 -Xms 为jvm ...
- Java jvm 内存参数限制
nohup java -jar -Xms3g -Xmx3g jenkins.war > jenkins.log 2>&1 &
- jvm内存参数配置
qunar国内旗舰店master (4核 8G) qunar国内旗舰店hub(4核 8G) qunar国内旗舰店provider(4核 8G)
- 深入详解JVM内存模型与JVM参数详细配置
对于大多数应用来说,Java 堆(Java Heap)是Java 虚拟机所管理的内存中最大的一块.Java 堆是被所有线程共享的一块内存区域,在虚拟机启动时创建. JVM内存结构 由上图可以清楚的看到 ...
- 直通BAT必考题系列:深入详解JVM内存模型与JVM参数详细配置
VM基本是BAT面试必考的内容,今天我们先从JVM内存模型开启详解整个JVM系列,希望看完整个系列后,可以轻松通过BAT关于JVM的考核. BAT必考JVM系列专题 1.JVM内存模型 2.JVM垃圾 ...
- 详解JVM内存模型与JVM参数详细配置
对于大多数应用来说,Java 堆(Java Heap)是Java 虚拟机所管理的内存中最大的一块.Java 堆是被所有线程共享的一块内存区域,在虚拟机启动时创建. JVM内存结构 由上图可以清楚的看到 ...
- JVM的参数详解(转)
12年毕业到先在处理第一年外这几年纯属于打酱油,当初自学Java然后就出来找工作了,还有第一家面试就通过了挺幸运的 但之后的这段时间一直是处于吃老本的状态.最近心情真的很不好,各种黄老邪!一直处于堕落 ...
随机推荐
- 记一次 MySQL timestamp 精度问题的排查 → 过程有点曲折
开心一刻 下午正准备出门,跟正刷着手机的老妈打个招呼 我:妈,今晚我跟朋友在外面吃,就不在家吃了 老妈拿着手机跟我说道:你看这叫朋友骗缅北去了,tm血都抽干了,多危险 我:那是他不行,你看要是吴京去了 ...
- GaussDB(DWS)函数不同写法引发的结果差异
本文分享自华为云社区<GaussDB(DWS)函数结果差异案例之greatest>,作者: 你是猴子请来的救兵吗. GaussDB(DWS)支持多种兼容模式,为了兼容目标数据库,各模式之间 ...
- 史上最强DIY,手工制作一只会说话的机器狗
摘要:波士顿动力的机器狗,想要么?快来跟我一起动手制作吧. 波士顿动力的机器狗了解吗? 一个会后空翻.会开门.会爬楼梯的AI. 最近,我们实验室就来了一批mini版的机器狗,虽然不会各种高难度杂技动作 ...
- 教你用Python自制拼图小游戏,轻松搞定熊孩子
摘要:本文主要为大家详细介绍了python实现拼图小游戏,文中还有示例代码介绍,感兴趣的小伙伴们可以参考一下. 开发工具 Python版本:3.6.4 相关模块: pygame模块: 以及一些Pyth ...
- 鸿蒙轻内核M核源码分析:中断Hwi
摘要:本文带领大家一起剖析了鸿蒙轻内核的中断模块的源代码,掌握中断相关的概念,中断初始化操作,中断创建.删除,开关中断操作等. 本文分享自华为云社区<鸿蒙轻内核M核源码分析系列五 中断Hwi&g ...
- 面试官:说一下Jena推理
摘要:本文介绍了Jena的推理子系统,并构建了一个简单的RDF图.基于该RDF图,我们搭建了一个Jena推理引擎,并进行自动化推理. 本文分享自华为云社区<知识推理之基于jena的知识推理(三) ...
- 云图说|分布式事务管理DTM:“买买买”背后的小帮手
摘要:分布式事务管理DTM通过提供高性能.高可靠.低侵入等核心价值,可以更好的帮助企业应对微服务场景带来的一致性问题. 本文分享自华为云社区<[云图说]第224期 分布式事务管理DTM,&quo ...
- Vue混淆与还原
引言 Vue是一种流行的JavaScript框架,用于构建用户界面.它简单易用且功能强大,备受开发者喜爱.然而,在传输和存储过程中,我们需要保护Vue代码的安全性.混淆是一种有效的保护措施,可以加 ...
- 字节跳动基于DataLeap的DataOps实践
更多技术交流.求职机会,欢迎关注字节跳动数据平台微信公众号,回复[1]进入官方交流群 本文根据 ArchSummit 全球架构师峰会(深圳站)来自抖音数据研发负责人王洋的现场分享实录整理而成(有删减) ...
- 火山引擎A/B测试:MAB智能调优实验,企业活动效果提升新利器
618临近,各大电商APP的预热活动已然拉开序幕.对企业而言,一场活动从策划到上线,中间经过效果验证,其业务成本很高.一个好的活动创意从策划.开发.到最终发布,至少会经历几周实践,如果中间还经历A ...