JVM内存分配调优
Reference: https://time.geekbang.org/column/article/108139
参考指标
- GC频率:⾼频的FullGC会给系统带来⾮常⼤的性能消耗,虽然MinorGC相对FullGC来说好了许多,但过多的MinorGC仍会给系统带来压⼒。
- 内存:这⾥的内存指的是堆内存⼤⼩,堆内存又分为年轻代内存和⽼年代内存。⾸先我们要分析堆内存⼤⼩是否合适,其实是分析年轻代和⽼年代的⽐例是否合适。如果内存不⾜或分配不均匀,会增加FullGC,严重的将导致CPU持续爆满,影响系统性能。
- 吞吐量:频繁的FullGC将会引起线程的上下⽂切换,增加系统的性能开销,从⽽影响每次处理的线程请求,最终导致系统的吞吐量下降。
- 延时:JVM的GC持续时间也会影响到每次请求的响应时间。
具体调优方法
性能配置参数如果⼀定要改,那就必须基于⼤量的测试结果或线上的具体性能来进⾏调整,这是优化的前提
- 调整堆内存空间减少FullGC:通过⽇志分析,堆内存基本被⽤完了,⽽且存在⼤量FullGC,这意味着我们的堆内存严重不⾜,这个时候我们需要调⼤堆内存空间。
- 设置Eden、Survivor区⽐例:在JVM中,如果开启 AdaptiveSizePolicy,则每次 GC 后都会重新计算 Eden、From Survivor和 To Survivor区的⼤⼩,计算依据是 GC 过程中统计的 GC 时间、吞吐量、内存占⽤量。这个时候SurvivorRatio默认设置的⽐例会失效。在JDK1.8中,默认是开启AdaptiveSizePolicy的,我们可以通过-XX:-UseAdaptiveSizePolicy关闭该项配置,或显⽰运⾏-XX:SurvivorRatio=8,将Eden、Survivor的⽐例设置为8:2。⼤部分新对象都是在Eden区创建的,我们可以固定Eden区的占⽤⽐例,来调优JVM的内存分配性能。
JVM内存分配调优的更多相关文章
- JVM内存分配和垃圾回收以及性能调优
JVM内存分配策略 一:堆中优先分配Eden 大多数情况下,对象都在新生代的Eden区中分配内存.而新生代会频繁进行垃圾回收. 二:大对象直接进入老年代 需要大量连续空间的对象,如:长字符串.数组等, ...
- Android性能调优篇之探索JVM内存分配
开篇废话 今天我们一起来学习JVM的内存分配,主要目的是为我们Android内存优化打下基础. 一直在想以什么样的方式来呈现这个知识点才能让我们易于理解,最终决定使用方法为:图解+源代码分析. 欢迎访 ...
- JVM(五) 生产环境内存溢出调优
1.gc配置参数 1.1 控制台打印gc日志 -verbose:gc -XX:+PrintGCDetails -XX:+PrintHeapAtGC(详细的gc信息) 1.2 输出gc日志到指定文件 - ...
- [JVM教程与调优] 了解JVM 堆内存溢出以及非堆内存溢出
在上一章中我们介绍了JVM运行时参数以及jstat指令相关内容:[JVM教程与调优] 什么是JVM运行时参数?.下面我们来介绍一下jmap+MAT内存溢出. 首先我们来介绍一下下JVM的内存结构. J ...
- Java系列笔记(4) - JVM监控与调优
目录 参数设置收集器搭配启动内存分配监控工具和方法调优方法调优实例 光说不练假把式,学习Java GC机制的目的是为了实用,也就是为了在JVM出现问题时分析原因并解决之.通过学习,我觉得JVM ...
- JVM监控与调优
目录 参数设置收集器搭配启动内存分配监控工具和方法调优方法调优实例 转:http://www.cnblogs.com/zhguang/p/java-jvm-gc.html光说不练假把式,学习J ...
- [java] JVM监控与调优
原文出处:http://www.cnblogs.com/zhguang/p/java-jvm-gc.html 光说不练假把式,学习Java GC机制的目的是为了实用,也就是为了在JVM出现问题时分 ...
- Tomcat性能调优-JVM监控与调优
参数设置 在Java虚拟机的参数中,有3种表示方法用"ps -ef |grep "java"命令,可以得到当前Java进程的所有启动参数和配置参数: 标准参数(-),所有 ...
- Linux下jetty报java.lang.OutOfMemoryError: PermGen space及Jetty内存配置调优解决方案
Linux下的jetty报java.lang.OutOfMemoryError: PermGen space及Jetty内存配置调优解决方案问题linux的jetty下发布程序后再启动jetty服务时 ...
随机推荐
- Azure Monitor Kibana configuration always seems to send over SSL
https://github.com/elastic/logstash/issues/10125 https://blogs.cisco.com/security/step-by-step-setup ...
- leetcode-mid-array-31 three sum-NO
my code: time limited def threeSum(nums): """ :type nums: List[int] :rtype: List[L ...
- 使用spring配置类代替xml配置文件注册bean类
spring配置类,即在类上加@Configuration注解,使用这种配置类来注册bean,效果与xml文件是完全一样的,只是创建springIOC容器的方式不同: //通过xml文件创建sprin ...
- PMBOK
项目章程的内容1. 基于项目干系人的需求和期望提出的要求.2. 项目必须满足的业务要求或产品需求.3. 项目的目的或项目立项的理由.4. 委派的项目经理及项目经理的权限级别.5. 概要的里程碑进度计划 ...
- Numpy 里线性代数函数
c
- vue集成汉字转拼音或提取首字母
需求: 有时我们为了节省用户的维护量,需要根据中文生成出相应的拼音和缩写 解决: 此方法是利用汉字和Unicode编码对应找到相应字母 一.编写汉字和编码 ...
- 编译的时候出现"/usr/bin/ld: cannot find -lz
编译的时候出现"/usr/bin/ld: cannot find -lz"错误,需要安装zlib-dev这个包,在线安装命令为:apt-get install zlib1g-dev ...
- 002--PowerDesigner显示注释comment
PowerDesigner显示注释comment 参考博客:https://blog.csdn.net/chao_1990/article/details/52620206 原始样式 显示操作 调出执 ...
- CentOSLinux系统中Redis数据库的安装及配置
MongoDB 传统方式安装 关闭 SELinux 编辑配置文件:vim /etc/selinux/config 把 SELINUX=enforcing 改为 SELINUX=disabled Mon ...
- Spring 容器的基本用法
容器的基本用法 bean 是 Spring 中最核心的东西,因为 Spring 就像是个大水桶,而 bean 就像是容器中的水,水桶脱离了水也没什么用处了,来看看 bean 的定义. public c ...