首页 > 解决方案 > 应用程序处于空闲状态时没有 GC

问题描述

我正在使用基于 spring-boot 的微服务。它是高吞吐量读取服务。我注意到,如果我让服务器运行更长时间(几小时或一天)而不增加任何负载,G1 Eden 空间会不断增长,并且在此期间不会发生 GC。结果,一旦我开始向服务器发送流量,GC 就会启动,并且 GC 时间会比一般情况下更长(从 240 毫秒到 480 毫秒几乎翻了一番)。这将使线程在短时间内保持忙碌状态,并导致客户端的请求超时。

Java version: 1.8.0_131
Current load: 450 TPS
GC: G1GC
Heap Parameter used:
-Xms4g
-Xmx4g
-XX:NewRatio=2
-XX:SurvivorRatio=8
-XX:TargetSurvivorRatio=90
-XX:+UseCompressedClassPointers
-XX:+UseCompressedOops
-XX:MetaspaceSize=640m
-XX:MaxMetaspaceSize=640m
-Xss512k
-XX:+UseG1GC

问题: 1)为什么服务器处于空闲状态时没有GC活动?
2) 为什么我们在 GC 的初始阶段会增加 GC 时间,这会使所有线程暂停更长的时间?
3) 为什么我们看到 G1 幸存者空间出现峰值?

在此处输入图像描述

标签: javaperformancegarbage-collectionperformance-testing

解决方案


推荐阅读