当前位置: 首页 > 知识库问答 >
问题:

奇怪的小gc发生在正常的小gc之后

郭博涉
2023-03-14
2013-11-26T10:19:30.011+0800: [GC [ParNew: 2432484K->19997K(2696640K), 0.0378270 secs] 5560240K->3155822K(7691712K), 0.0398670 secs] [Times: user=0.18 sys=0.00, real=0.04 secs] 
2013-11-26T10:19:36.277+0800: [GC [ParNew: 2417093K->15777K(2696640K), 0.0372550 secs] 5552917K->3151795K(7691712K), 0.0388490 secs] [Times: user=0.28 sys=0.00, real=0.04 secs] 
**2013-11-26T10:19:36.325+0800: [GC [ParNew: 20441K->16452K(2696640K), 0.0186420 secs] 3156459K->3153092K(7691712K), 0.0200280 secs] [Times: user=0.17 sys=0.00, real=0.02 secs]** 
2013-11-26T10:19:41.464+0800: [GC [ParNew: 2413508K->22811K(2696640K), 0.0426440 secs] 5550148K->3160128K(7691712K), 0.0444710 secs] [Times: user=0.25 sys=0.00, real=0.04 secs] 

很明显,小的gc每隔5或6秒就会发生一次。

在2013-11-26T10:19:36.277之后,在2013-11-26T10:19:36.325有一个次要的gc只使用了20441K!!!

为什么会发生小的gc(行上方的blod)?谁知道啊?

更多详细信息:

内存总数16322984 KB

jvm(热点1.6.0_26)的参数是:

-xms7804m-xmx7804m-xmn2926m-xx:permsize=256m-xx:maxpermsize=256m-xx:survivorratio=8-xx:targetsurvivorratio=70-xx:maxtenuringthreshold=10-server-xss256k-xx:+heapdumponoutofmemoryerror-xx:+printgcdetails-xx:+printgcdatestamps-xx:+useconcmarksweepgc-xx:+disableexplicitgc

@Alexey Ragozin更多日志:

2013-11-27T23:34:47.352+0800: [GC [ParNew: 2496458K->81521K(2696640K), 0.0381510 secs]     5104803K->2690529K(7691712K), 0.0406260 secs] [Times: user=0.28 sys=0.00, real=0.04 secs] 
2013-11-27T23:34:51.745+0800: [GC [ParNew: 2478577K->57599K(2696640K), 0.0535680 secs] 5087585K->2716762K(7691712K), 0.0554400 secs] [Times: user=0.28 sys=0.01, real=0.06 secs] 
2013-11-27T23:34:55.728+0800: [GC [ParNew: 2454747K->19841K(2696640K), 0.0300150 secs] 5113910K->2679701K(7691712K), 0.0320030 secs] [Times: user=0.18 sys=0.00, real=0.03 secs] 
**2013-11-27T23:34:55.769+0800: [GC [ParNew: 21438K->16389K(2696640K), 0.0171200 secs] 2681299K->2676788K(7691712K), 0.0187850 secs] [Times: user=0.13 sys=0.00, real=0.02 secs]** 
2013-11-27T23:34:59.888+0800: [GC [ParNew: 2413445K->16017K(2696640K), 0.0251400 secs] 5073844K->2676744K(7691712K), 0.0271570 secs] [Times: user=0.15 sys=0.00, real=0.02 secs] 
2013-11-27T23:35:04.374+0800: [GC [ParNew: 2413073K->16059K(2696640K), 0.0240360 secs] 5073800K->2677460K(7691712K), 0.0259960 secs] [Times: user=0.15 sys=0.00, real=0.03 secs] 
... ...
2013-11-28T02:56:57.719+0800: [GC [ParNew: 2449927K->45500K(2696640K), 0.0360740 secs] 6195838K->3791742K(7691712K), 0.0379370 secs] [Times: user=0.23 sys=0.00, real=0.03 secs] 
2013-11-28T02:57:37.987+0800: [GC [ParNew: 2442556K->54097K(2696640K), 0.0383490 secs] 6188798K->3800678K(7691712K), 0.0402170 secs] [Times: user=0.23 sys=0.00, real=0.04 secs] 
2013-11-28T02:57:38.036+0800: [GC [1 CMS-initial-mark: 3746580K(4995072K)] 3801777K(7691712K), 0.0694940 secs] [Times: user=0.06 sys=0.00, real=0.07 secs] 
2013-11-28T02:57:38.770+0800: [CMS-concurrent-mark: 0.661/0.662 secs] [Times: user=2.15 sys=0.00, real=0.66 secs] 
2013-11-28T02:57:38.806+0800: [CMS-concurrent-preclean: 0.035/0.035 secs] [Times: user=0.06 sys=0.01, real=0.04 secs] 
 CMS: abort preclean due to time 2013-11-28T02:57:43.862+0800: [CMS-concurrent-abortable-preclean: 5.016/5.056 secs] [Times: user=6.82 sys=0.19, real=5.05 secs] 
**2013-11-28T02:57:43.872+0800: [GC[YG occupancy: 407766 K (2696640 K)]2013-11-28T02:57:43.872+0800: [GC [ParNew: 407766K->35780K(2696640K), 0.0236470 secs] 4154346K->3782623K(7691712K), 0.0256460 secs] [Times: user=0.20 sys=0.00, real=0.03 secs]** 
[Rescan (parallel) , 0.0119390 secs][weak refs processing, 0.8478360 secs][class unloading, 0.0661530 secs][scrub symbol & string tables, 0.0146780 secs] [1 CMS-remark: 3746843K(4995072K)] 3782623K(7691712K), 1.1138910 secs] [Times: user=1.41 sys=0.00, real=1.12 secs] 
2013-11-28T02:57:48.965+0800: [CMS-concurrent-sweep: 3.893/3.977 secs] [Times: user=5.65 sys=0.15, real=3.97 secs] 
2013-11-28T02:57:48.977+0800: [CMS-concurrent-reset: 0.012/0.012 secs] [Times: user=0.02 sys=0.00, real=0.02 secs]

共有1个答案

楚弘益
2023-03-14

-xx:+CMSScavengeBeForereMark是您奇怪的次要集合的一个原因。

CMS必须执行2次“停止世界”暂停以完成旧的空间收集周期

  • 初始标记
  • 备注

有关CMS机制的更多详细信息-了解JVM中的GC暂停,HotSpot的CMS收集器
有关JVM GC选项的更多信息-HotSpot JVM垃圾收集选项备忘单

更新
从技术上讲,还有另一个原因可能导致早产的年轻GC。如果应用程序试图分配放不下Eden的大数组,JVM可能会启动收集以释放空间。这是有可能的,但更有可能的是JVM会选择在旧空间中直接分配这个数组。

 类似资料:
  • 问题内容: 我不知道我的Java进程发生了什么。此过程是一个索引过程。它从一组zip文件中读取文档,并将其添加到lucene索引中。GC日志显示它正在连续运行Full GC。 据我所能解释的这些行,前后对象的大小约为19M,但是为什么它一直都在运行呢? 线程转储如下所示: 从线程转储中,看起来好像2G烫发一代已经装满了。烫发真的需要那么多空间吗? 问题答案: 如果您的内存碎片化或没有任何清理余地,

  • Gc

    gc – 控制垃圾回收 gc 模块提供了垃圾收集器的控制接口。 函数 gc.enable() 允许自动回收内存碎片。 gc.disable() 禁止自动回收,但可以通过collect()函数进行手动回收内存碎片。 gc.collect() 运行一次垃圾回收。 gc.mem_alloc() 返回已分配的内存数量。 gc.mem_free() 返回剩余的内存数量。 更多内容可参考 gc 。

  • 问题内容: 我通过NPM安装了React js,并使用browserify来管理react中的组件。当React中发生异常时,控制台显示为 “未捕获的错误:发生了最小化的异常;请使用非最小化的dev环境获取完整的错误消息和其他有用的警告。” 如何启用完整的错误消息? 问题答案: 正如本杰明·格伦鲍姆(Benjamin Gruenbaum)在评论中指出的那样,将NODE_ENV设置为开发状态可以解决

  • 我正在弄乱我的DataDroid库,新的lint检查显示Android软件开发工具包中有一个奇怪的错误。 对于那些不了解DataDroid的人来说,它是一个用于本地和远程数据管理的库(更多信息请参见:http://datadroid.foxykeep.com) 为了调用库中的Web服务,我使用AndroidHttpClient类与NetworkConnection类中的服务器建立连接。我的程序库适

  • Seafile 利用存储去重技术来减少存储资源的利用。 简单来说,这包含如下两层含义: 不同版本的文件或许会共享一些数据块。 不同的资料库也或许会共享一些数据块。 运用这项技术之后,在你删除一个资料库时,会导致底层数据块不会被立即删除,因此 Seafile 服务器端没用的数据块将会增多。 通过运行垃圾回收程序,可以清理无用的数据块,释放无用数据块所占用的存储空间。 垃圾回收程序将会清理如下两种无用

  • 命名 git-gc - 清理不必要的文件并优化本地存储库 概要 git gc [--aggressive] [--auto] [--quiet] [--prune=<date> | --no-prune] [--force] 描述 在当前存储库中运行许多内务处理任务,例如压缩文件修订(以减少磁盘空间并提高性能)并移除可能由之前git add调用创建的不可达对象。 鼓励用户在每个存储库中定期运行此任