Зачем запускать триггер cms, когда 0K используют в старом поколении при запуске jvm? - PullRequest
0 голосов
/ 31 января 2019

Когда я запускаю jvm (jdk 8), я нахожу этот cms gc log.Это показывает, что старое поколение использует 0K (0K (1747648K)), но jvm выполняет сбор cms.Почему?

2019-01-31T18:00:28.603+0800: 4.466: [GC (CMS Initial Mark) [1 CMS-initial-mark: 0K(1747648K)] 65577K(2534080K), 0.0077440 secs] [Times: user=0.03 sys=0.00, real=0.01 secs] 
2019-01-31T18:00:28.611+0800: 4.474: [CMS-concurrent-mark-start]
2019-01-31T18:00:28.627+0800: 4.490: [CMS-concurrent-mark: 0.016/0.016 secs] [Times: user=0.06 sys=0.01, real=0.02 secs] 
2019-01-31T18:00:28.627+0800: 4.490: [CMS-concurrent-preclean-start]
2019-01-31T18:00:28.630+0800: 4.493: [CMS-concurrent-preclean: 0.003/0.003 secs] [Times: user=0.01 sys=0.00, real=0.00 secs] 
2019-01-31T18:00:28.630+0800: 4.493: [CMS-concurrent-abortable-preclean-start]
2019-01-31T18:00:29.748+0800: 5.611: [CMS-concurrent-abortable-preclean: 0.824/1.117 secs] [Times: user=4.06 sys=0.13, real=1.12 secs] 
2019-01-31T18:00:29.749+0800: 5.612: [GC (CMS Final Remark) [YG occupancy: 437791 K (786432 K)]2019-01-31T18:00:29.749+0800: 5.612: [Rescan (parallel) , 0.2379222 secs]2019-01-31T18:00:29.987+0800: 5.850: [weak refs processing, 0.0000407 secs]2019-01-31T18:00:29.987+0800: 5.850: [class unloading, 0.0058594 secs]2019-01-31T18:00:29.993+0800: 5.856: [scrub symbol table, 0.0026897 secs]2019-01-31T18:00:29.995+0800: 5.858: [scrub string table, 0.0006242 secs][1 CMS-remark: 0K(1747648K)] 437791K(2534080K), 0.2489874 secs] [Times: user=0.96 sys=0.02, real=0.25 secs] 

Ниже мой вариант jvm:

 -server -Xms2560m -Xmx2560m -XX:MaxPermSize=256m 
 -XX:+UnlockExperimentalVMOptions -Dcom.sun.management.jmxremote 
 -Dcom.sun.management.jmxremote.port=52001 -Dcom.sun.management.jmxremote.authenticate=false
  -Dcom.sun.management.jmxremote.ssl=false  -XX:+UseConcMarkSweepGC 
  -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=test 
  -XX:+PrintGCDateStamps -XX:+PrintGCDetails 
  -Xloggc:gc.log -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=10 -XX:GCLogFileSize=10M      

Ответы [ 2 ]

0 голосов
/ 19 февраля 2019

Что -XX: + PrintTenuringDistribution и -XX: + PrintGCCause приводят в качестве причины?

0 голосов
/ 01 февраля 2019

Это показывает, что старое поколение использует 0K (0K (1747648K))

Это, вероятно, из-за инициации заполнения кучи эвристики, устанавливающей действительно низкое значение.Попробуйте установить его явно -XX:InitiatingHeapOccupancyPercent=80 -XX+UseCMSInitiatingOccupancyOnly, который будет запускаться только тогда, когда 80% кучи заполнено.

...