这是由 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]
答案 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
由于新的统一日志记录系统