JVM系列文章目录
JVM调优之内存优化与GC优化
前言
本文基于JDK1.8,主要介绍堆内存大小调整堆JVM效率堆影响。
Apache Bench
我在此次调优中使用该压测工具进行测试,这里详细安装操作就不进行介绍了,各位可以参考官网。
内存调优与GC调优
测试工程
我这里简单的构造一个spring boot 工程,只有简单的对象构建存储,这样就可以抛除代码性能问题等一系列其他干扰因素,只关心内存相关信息。
工程结构:
测试接口代码:
package cn.abfeathers.controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import java.util.ArrayList;
import java.util.List;
/**
* @author: abfeathers
* @date: 2021/3/20
* @description: 测试接口
*/
@RestController
@RequestMapping("/jvm")
public class TestController {
@RequestMapping("/heap")
public String test(){
List<Byte[]> list = new ArrayList<Byte[]>();
Byte[] b = new Byte[1024*1024];
list.add(b);
return "success";
}
}
JVM默认内存分配下进行压测
本来想再做一组1000并发和10000并发的测试的,mac 自带的ab有一些bug,高并发没办法测试,本来准备新装一个ab,然后替换原来的,但是M1改不了权限,就能拿这个200并发的意思一下了。我这边强制将堆空间压缩到了200M -xms200m -Xmx200m
-
启动测试工程。
-
先进行一轮测试预热。
我们采用10的并发,测试10万请求。ab -c 10 -n 10000 -k http://localhost:8080/jvm/heap
查看GC情况jstat -gc 1613 5000 20 | awk '{print $13,$14,$15,$16,$17}'
-
200并发,测试10万请求。
测试结束,GC情况:
测试结果:
优化一
这次我将JVM内存增大到500M -xms500m -Xmx500m
,再来进行100并发,10万请求的压测。
-
重新启动启动测试工程。
-
再次采用10的并发,测试10万请求进行预热。
-
200并发,测试10万请求。
优化二
这次我不光将JVM内存增大到500M,还调整堆空间各个分区的比例8:1:1,扩大Eden区 -xms500m -Xmx500m -XX:SurvivorRatio=8
,再来进行100并发,10万请求的压测。
-
重新启动启动测试工程。
-
再次采用10的并发,测试10万请求进行预热。
-
200并发,测试10万请求。
调优总结
需要考虑一下四个方面
-
GC 频率
高频的 FullGC 会给系统带来非常大的性能消耗,虽然 MinorGC 相对 FullGC 来说好了许多,但过多的 MinorGC 仍会给系统带来压力。 -
内存
这里的内存指的是堆内存大小,堆内存又分为年轻代内存和老年代内存。堆内存不足,会增加 MinorGC ,影响系统性能。 -
吞吐量
频繁的 GC 将会引起线程的上下文切换,增加系统的性能开销,从而影响每次处理的线程请求,最终导致系统的吞吐量下降。 -
延时
JVM 的 GC 持续时间也会影响到每次请求的响应时
其实我们在一般项目中,堆空间大小都不太大,而当高并发的时候实际上是需要一个大堆空间,但是光调大堆空间效果还不是最好的,我们还要合理的分配Eden区、From区、To区的大小,因为在高并发的场景下,大部分对象都是“一次性”用品,完全不需要回收。
而且一味的调大堆空间有时候也反而会使性能降低,因为单次 Minor GC 时间是由两部分组成:T1(扫描新生代)和 T2(复制存活对象)。当对象存活时间>MinorGC间隔时间的时候,而新生代内存比例又没有调整的话,就有可能降低性能。
推荐策略
-
新生代大小选择
-
老年代大小选择
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。