caisirius 2016-06-30 10:34
浏览 2271

CMS GC 超慢的问题,耗时10几秒

我的一个程序 JVM配置如下:
-Djava.awt.headless=true -Djava.net.preferIPv4Stack=true -server -Xms1436m -Xmx1436m -XX:PermSize=128m -Xss512k -XX:+DisableExplicitGC -XX:+UseConcMarkSweepGC -XX:+CMSParallelRemarkEnabled -XX:+UseCMSCompactAtFullCollection -XX:LargePageSizeInBytes=128m -XX:+UseFastAccessorMethods -XX:+UseCMSInitiatingOccupancyOnly -XX:CMSInitiatingOccupancyFraction=70 -Dfile.encoding=UTF-8

运行7天之后,触发CMS GC ,但是 remark阶段耗时13秒多
CMS日志如下:
2016-06-14T12:19:53.823+0800: 831117.960: [GC [1 CMS-initial-mark: 910089K(1300096K)] 911555K(1453440K), 0.0045750 secs] [Times: user=0.00 sys=0.00, real=0.00 secs]
2016-06-14T12:19:53.827+0800: 831117.964: [CMS-concurrent-mark-start]
2016-06-14T12:20:18.667+0800: 831142.805: [GC2016-06-14T12:20:18.668+0800: 831142.805: [ParNew: 136822K->594K(153344K), 0.0083030 secs] 1046912K->910689K(1453440K), 0.0085020 secs] [Times: user=0.01 sys=0.00, real=0.01 secs]
2016-06-14T12:20:32.330+0800: 831156.467: [GC2016-06-14T12:20:32.330+0800: 831156.467: [ParNew: 136914K->963K(153344K), 0.0092670 secs] 1047009K->911060K(1453440K), 0.0094830 secs] [Times: user=0.02 sys=0.00, real=0.01 secs]
2016-06-14T12:20:46.119+0800: 831170.257: [GC2016-06-14T12:20:46.120+0800: 831170.257: [ParNew: 137283K->817K(153344K), 0.0094710 secs] 1047380K->910917K(1453440K), 0.0097340 secs] [Times: user=0.02 sys=0.00, real=0.01 secs]
2016-06-14T12:20:55.369+0800: 831179.506: [CMS-concurrent-mark: 61.478/61.542 secs] [Times: user=4.47 sys=1.01, real=61.54 secs]
2016-06-14T12:20:55.369+0800: 831179.506: [CMS-concurrent-preclean-start]
2016-06-14T12:20:55.378+0800: 831179.515: [CMS-concurrent-preclean: 0.009/0.009 secs] [Times: user=0.01 sys=0.00, real=0.01 secs]
2016-06-14T12:20:55.378+0800: 831179.515: [CMS-concurrent-abortable-preclean-start]
CMS: abort preclean due to time 2016-06-14T12:21:00.458+0800: 831184.595: [CMS-concurrent-abortable-preclean: 0.274/5.079 secs] [Times: user=0.53 sys=0.02, real=5.07 secs]
2016-06-14T12:21:00.468+0800: 831184.606: [GC[YG occupancy: 99240 K (153344 K)]2016-06-14T12:21:00.469+0800: 831184.606: [Rescan (parallel) , 0.0932490 secs]2016-06-14T12:21:00.562+0800: 831184.699: [**weak refs processing, 16.0619290 secs**]2016-06-14T12:21:16.624+0800: 831200.761: [scrub string table, 0.0013860 secs] [1 CMS-remark: 910100K(1300096K)] 1009340K(1453440K), 16.1609100 secs] [Times: user=0.87 sys=0.18, real=**16.15 secs**]
2016-06-14T12:21:16.630+0800: 831200.767: [CMS-concurrent-sweep-start]
2016-06-14T12:21:17.204+0800: 831201.341: [GC2016-06-14T12:21:17.204+0800: 831201.341: [ParNew: 137137K->1303K(153344K), 0.0745120 secs] 1025154K->889408K(1453440K), 0.0747720 secs] [Times: user=0.06 sys=0.00, real=0.07 secs]
2016-06-14T12:21:18.192+0800: 831202.330: [CMS-concurrent-sweep: 1.105/1.563 secs] [Times: user=1.08 sys=0.17, real=1.57 secs]
2016-06-14T12:21:18.192+0800: 831202.330: [CMS-concurrent-reset-start]
2016-06-14T12:21:18.199+0800: 831202.336: [CMS-concurrent-reset: 0.006/0.006 secs] [Times: user=0.00 sys=0.01, real=0.00 secs]

看日志 主要是慢在了 weak refs processing

gc的 开始日志是:
Java HotSpot(TM) 64-Bit Server VM (24.79-b02) for linux-amd64 JRE (1.7.0_79-b15), built on Apr 10 2015 11:34:48 by "java_re" with gcc 4.3.0 20080428 (Red Hat 4.3.0-8)
Memory: 4k page, physical 1922324k(1016052k free), swap 1015804k(980628k free)
CommandLine flags: -XX:CMSInitiatingOccupancyFraction=70 -XX:+CMSParallelRemarkEnabled -XX:+DisableExplicitGC -XX:InitialHeapSize=1505755136 -XX:LargePageSizeInBytes=134217728 -XX:MaxHeapSize=1505755136 -XX:MaxNewSize=174485504 -XX:MaxTenuringThreshold=6 -XX:NewSize=174485504 -XX:OldPLABSize=16 -XX:OldSize=348971008 -XX:PermSize=134217728 -XX:+PrintGC -XX:+PrintGCDateStamps -XX:+PrintGCDetails -XX:+PrintGCTimeStamps -XX:ThreadStackSize=512 -XX:+UseCMSCompactAtFullCollection -XX:+UseCMSInitiatingOccupancyOnly -XX:+UseCompressedOops -XX:+UseConcMarkSweepGC -XX:+UseFastAccessorMethods -XX:+UseParNewGC

可以看到 新生代 是 166M左右,会不会是这原因??

  • 写回答

0条回答 默认 最新

    报告相同问题?

    悬赏问题

    • ¥100 c语言,请帮蒟蒻写一个题的范例作参考
    • ¥15 名为“Product”的列已属于此 DataTable
    • ¥15 安卓adb backup备份应用数据失败
    • ¥15 eclipse运行项目时遇到的问题
    • ¥15 关于#c##的问题:最近需要用CAT工具Trados进行一些开发
    • ¥15 南大pa1 小游戏没有界面,并且报了如下错误,尝试过换显卡驱动,但是好像不行
    • ¥15 没有证书,nginx怎么反向代理到只能接受https的公网网站
    • ¥50 成都蓉城足球俱乐部小程序抢票
    • ¥15 yolov7训练自己的数据集
    • ¥15 esp8266与51单片机连接问题(标签-单片机|关键词-串口)(相关搜索:51单片机|单片机|测试代码)