我在应用程序的垃圾收集器方面遇到了问题,我正在使用GCP环境与Kubernetes和BigTable作为数据源。当接收到负载时,应用程序不释放内存空间并且填满直到k8s重新启动POD。我使用分析器来查看JVM的行为,这是结果。在“Old Gen”池中可以看到内存已满,但它从未释放空间并且填满直到重新启动和再次启动。
在“伊甸空间”池中,当它正在填充时,空间被释放并且永远不会达到极限。
这是在创建Docker镜像以在K8s中部署时的JVM配置。
java
-XX:+UnlockExperimentalVMOptions
-XX:+UseG1GC
-XX:+UseCGroupMemoryLimitForHeap
-XX:+AlwaysPreTouch
-XX:ParallelGCThreads=5
-XX:GCTimeRatio=4
-XX:MaxGCPauseMillis=100
-XX:MinHeapFreeRatio=30
-XX:MaxHeapFreeRatio=30
-Xms512m
-Xmx4608m
在另一个进行REST调用且从未出现内存填充问题的应用程序中,应用了相同的配置。
Java版本为1.8
感谢您的帮助。
问候。