前言

开发了大半年的数据中台系统,近期在测试环境上线压测,监控JVM时发现GC频繁,开启GC日志后发现隔几秒就要做一次Minor
GC(对新生代内存进行回收),并且堆内存不到十分之一的时候就进行GC(测试-Xmx设置为10g,使用不到1g就进行了gc),于是从两个方面进行系统的优化(代码层面和jvm启动参数)。

1、代码层面

观察jvm内存使用的时候,发现堆内存在5秒内就迅速上升1g,此时HTTP访问的人数为1,那么在并发访问数目极少的情况下,内存上升快的原因应该就是后台的监控线程了(在后台的线程池中做服务进程、数据仓库、中间件kafka的监控),在这些监控线程中,有大量的RESTful
API请求以及对服务器端口的检测(远程)。经过分析代码发现,因为监控线程定时运行,其中大部分的远程连接和api请求可以不断开,保存在内存中重复使用这些对象(加锁机制)。通过这部分的改造之后再观察jvm的使用情况,发现效果显著。

2、jvm参数层面

通过分析代码,总结出系统新生代的内存占用大,并且在GC的时候会回收大量的内存,前面也有说到过一共10G的堆内存,使用不到1G就进行了GC。因此从jvm的参数方面进行系统的调优。接下来会先介绍jvm的一些基础知识,并帮助大家进行参数调优理解。

2.1、JVM结构

技术
下载桌面版
GitHub
Gitee
SourceForge
百度网盘(提取码:draw)
云服务器优惠
华为云优惠券
腾讯云优惠券
阿里云优惠券
Vultr优惠券
站点信息
问题反馈
邮箱:[email protected]
吐槽一下
QQ群:766591547
关注微信