java - 应用程序处于空闲状态时没有 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 幸存者空间出现峰值?
解决方案
推荐阅读
- c - 如何将字符串传递给C中的函数
- python - TypeError:“_SpecialGenericAlias”对象不支持项目分配
- c# - 为什么在加密字符串时得到一个空结果,即使我刷新了输入流?
- google-cloud-platform - 将 CyberPanel 的所有内容迁移到不同 VPS 上的新 CyberPanel
- flutter - 无法从 GmsCore 加载 IDynamiteLoader:找不到应用程序包 com.google.android.gms
- reactjs - 如何在本机反应中实现粘性表?
- c# - 如何将引用的 dll 移动到另一个文件夹 C#
- swiftui - SwiftUI List -> ForEach -> Item 是一个让,所以我不能改变一个值
- python - 裁剪后的图像发送一个空数组
- c# - blazor 中的 document.getElementById()