ConcMarkSweepGC曾经收集多少空间?

时间:2016-12-01 06:03:25

标签: java garbage-collection

这是由 ConcMarkSweepGC 打印的GC详细日志。似乎此日志不会告知此GarbageCollection中收集了多少空间。

我目前的JAVA_OPTS是 -XX:+UseConcMarkSweepGC -Xloggc:/home/admin/logs/gc.log -XX:+PrintGCDetails -XX:+PrintGCDateStamps

我真的不知道在这个GarbageCollection中收集了多少空间吗?

我的 JAVA_OPTS 有问题吗?

日志:

2016-11-28T20:19:22.937+0800: 357765.356: [GC (CMS Initial Mark) [1 CMS-initial-mark: 1734329K(2097152K)] 1925288K(4019584K), 0.0715106 secs] [Times: user=0.24 sys=0.00, real=0.08 secs] 
2016-11-28T20:19:23.010+0800: 357765.429: [CMS-concurrent-mark-start]
2016-11-28T20:19:23.826+0800: 357766.246: [CMS-concurrent-mark: 0.815/0.817 secs] [Times: user=0.95 sys=0.04, real=0.81 secs] 
2016-11-28T20:19:23.827+0800: 357766.246: [CMS-concurrent-preclean-start]
2016-11-28T20:19:23.840+0800: 357766.260: [CMS-concurrent-preclean: 0.013/0.014 secs] [Times: user=0.02 sys=0.00, real=0.02 secs] 
2016-11-28T20:19:23.840+0800: 357766.260: [CMS-concurrent-abortable-preclean-start]
 CMS: abort preclean due to time 2016-11-28T20:19:29.079+0800: 357771.499: [CMS-concurrent-abortable-preclean: 5.229/5.239 secs] [Times: user=5.63 sys=0.11, real=5.24 secs] 
2016-11-28T20:19:29.081+0800: 357771.500: [GC (CMS Final Remark) [YG occupancy: 374645 K (1922432 K)]2016-11-28T20:19:29.081+0800: 357771.501: [Rescan (parallel) , 0.2260699 secs]2016-11-28T20:19:29.307+0800: 357771.727: [weak refs processing, 0.0007908 secs]2016-11-28T20:19:29.308+0800: 357771.727: [class unloading, 0.0830640 secs]2016-11-28T20:19:29.391+0800: 357771.811: [scrub symbol table, 0.0242131 secs]2016-11-28T20:19:29.415+0800: 357771.835: [scrub string table, 0.0032310 secs][1 CMS-remark: 1734329K(2097152K)] 2108975K(4019584K), 0.3421430 secs] [Times: user=1.00 sys=0.00, real=0.34 secs] 
2016-11-28T20:19:29.424+0800: 357771.843: [CMS-concurrent-sweep-start]
2016-11-28T20:19:30.204+0800: 357772.623: [CMS-concurrent-sweep: 0.780/0.780 secs] [Times: user=0.86 sys=0.01, real=0.78 secs] 
2016-11-28T20:19:30.204+0800: 357772.623: [CMS-concurrent-reset-start]
2016-11-28T20:19:30.214+0800: 357772.633: [CMS-concurrent-reset: 0.010/0.010 secs] [Times: user=0.01 sys=0.00, real=0.01 secs] 

3 个答案:

答案 0 :(得分:0)

我们使用-verbose:gc和DateStamps一起添加如下:您可以尝试一次并确认。

db.project_if.aggregate([
  {
    $unwind: {
      path: '$_skills',
      preserveNullAndEmptyArrays: true,
    }
  },
  {
    $project: {
      _skills: {
        label: '$_skills',
        skill_score: {
          $cond: {
            if: {
              $eq: ['$_skills', undefined]
            },
            then: 0,
            else: 1,
          }
        }
      }
    }
  }, 
  {
    $redact: {
      $cond: {
        if: { $eq: [ "$skill_score", 0 ] },
        then: '$$PRUNE',
        else: '$$DESCEND'
      }
    }
  }
]);

您可以从我们使用此网站获取帮助:http://blog.sokolenko.me/2014/11/javavm-options-production.html

答案 1 :(得分:0)

您的JVM选项很好。但CMS正在同时工作,并且在周期结束时不打印老一代的最终尺寸。

您需要查看年轻GC 报告,了解CMS扫描完成后旧空间占用的内存量。

round

在年轻GC之后的旧空间使用量12.515: [GC (Allocation Failure) 12.515: [ParNew: 34805K->3103K(38080K), 0.0039903 secs] 134805K->103463K(122752K), 0.0040432 secs] [Times: user=0.00 sys=0.00, real=0.00 secs] 以上。

您可以通过计算最终评论前的最后一个年轻GC与同时重置后的第一个年轻GC之间的旧空间大小的差异来计算回收的内存大小。

或者您可以使用优秀的GCViewer工具来显示您的日志。

您可以找到有关阅读GC日志的更多信息here

答案 2 :(得分:0)

openjdk 8:-XX:+PrintHeapAtGC

openjdk 9:-Xlog:gc,heap+gc由于新的统一日志记录系统