俺写了一个简单的服务, 接入了监控, 没有流量.
但看监控, eden 区会周期性的达到 100% usage, 然后触发 YGC.
俺有点不明白, 这一点流量也没有, 为什么 eden 区会不断增加?
服务是使用 springboot 搭建的 web 服务, 同时接入了监控向 influxdb 上报一些 jvm 指标.
监控图如下, 20 分钟触发一次 YGC, 很规律.
另: 俺把 YGC 之前和之后 Heap Dump 了出来, 使用 MAT 来比较不同, 没发现什么异样啊, 但是两个 heap 文件大小还是明显有差别...
1
secondwtq 2022-04-29 16:59:14 +08:00
不要把时间浪费在 “GC 调优”这种落后又没用的八股文上
|
2
FreeEx 2022-04-29 17:18:11 +08:00
有一点你说错了,如果你用的监控是 Prometheus ,还是有流量的,监控数据是定期查询接口获取到的。
|
4
chendy 2022-04-29 17:30:39 +08:00
因为即使不接请求,也有后台线程在跑,也有新对象产生,也进 eden ,eden 满了就 gc
印象里 dump 或者 mat 分析的时候,对于 gc root 访问不到的对象会做清理不会收集,所以看着也是一样的 |
5
zmal 2022-04-29 17:41:05 +08:00
@alen0206 因为 GC 调优是整体调优的末末端。而且 G1 和 ZGC 已经没啥参数可调了。了解 GC 原理还是很有价值的。
|
6
bthulu 2022-04-30 08:56:48 +08:00
以后 gc 调优怕是要在线修改 jvm gc 代码了
|
7
turnrut 2022-04-30 20:25:44 +08:00
定期上报 jvm 指标不会产生新对象么?
mat 设置里保留不可达对象,应该能看到不同 |