Java 8應用young gc時間過長,平均耗時接近100ms,偶爾能到1.5s

Java 8應用young gc時間過長,平均耗時接近100ms,偶爾能到1.5s
使用垃圾收集器parNew + CMS,幾乎沒有觸發過CMS gc
使用框架spring + mybatis + dubbo + rocketmq
JVM參數:
-server -Xmx5g -Xms5g -Xmn1g -XX:MetaspaceSize=512m -XX:MaxMetaspaceSize=512m -Xss256k -XX:SurvivorRatio=8 -XX:+PrintGCDetails -Xloggc:/opt/apps/logs/gc.log -XX:+PrintGCDateStamps -XX:+PrintGCApplicationStoppedTime -XX:+PrintSafepointStatistics -XX:PrintSafepointStatisticsCount=1 -XX:+PrintReferenceGC -XX:+UnlockDiagnosticVMOptions -XX:-DisplayVMOutput -XX:+LogVMOutput -XX:LogFile=/opt/apps/logs/safepoint.log -XX:+UseParNewGC -XX:+UseConcMarkSweepGC -XX:CMSInitiatingOccupancyFraction=70 -XX:+CMSParallelRemarkEnabled -XX:+UseCMSCompactAtFullCollection -XX:+UseFastAccessorMethods -XX:+UseCMSInitiatingOccupancyOnly -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/opt/apps/logs

問題找到了,是容器的原因。
背景信息沒補充完全,應用是跑在docker裏的,jstack看了下,新生代的gc線程有54條,但是容器給的配置只有6核,所以可以確認JVM拿錯了CPU的核心數,拿到的是物理機的核心數。增加了參數-XX:ParallelGCThreads=6 -XX:ConcGCThreads=6,現在的新生代收集時間基本穩定在50ms以內。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章