Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么我的java应用程序将30%的时间花在年轻一代gc上?_Java_Solr_Garbage Collection - Fatal编程技术网

为什么我的java应用程序将30%的时间花在年轻一代gc上?

为什么我的java应用程序将30%的时间花在年轻一代gc上?,java,solr,garbage-collection,Java,Solr,Garbage Collection,我正在查看Solr安装的gc日志文件,我注意到执行年轻一代gc需要花费30%的时间。下面的日志片段跨度约为1秒,gc时间总计为.34秒 我的问题是:这是一个问题吗?如果是,是什么原因造成的 我正在Linux上运行JDK1.6.0_24 1004626.109: [GC 1004626.109: [ParNew: 74847K->5219K(76672K), 0.0838750 secs] 10831779K- 10762151K(11525824K), 0.0841790 secs] [T

我正在查看Solr安装的gc日志文件,我注意到执行年轻一代gc需要花费30%的时间。下面的日志片段跨度约为1秒,gc时间总计为.34秒

我的问题是:这是一个问题吗?如果是,是什么原因造成的

我正在Linux上运行JDK1.6.0_24

1004626.109: [GC 1004626.109: [ParNew: 74847K->5219K(76672K), 0.0838750 secs] 10831779K-
10762151K(11525824K), 0.0841790 secs] [Times: user=0.24 sys=0.00, real=0.09 secs] 
1004626.320: [GC 1004626.320: [ParNew: 73379K->5468K(76672K), 0.0527070 secs] 10830311K->10762874K(11525824K), 0.0529680 secs] [Times: user=0.20 sys=0.00, real=0.06 secs] 
1004626.511: [GC 1004626.511: [ParNew: 73628K->4986K(76672K), 0.0591070 secs] 10831034K->10763002K(11525824K), 0.0593820 secs] [Times: user=0.20 sys=0.00, real=0.05 secs] 
1004626.698: [GC 1004626.698: [ParNew: 73146K->5611K(76672K), 0.0523060 secs] 10831162K->10764169K(11525824K), 0.0525820 secs] [Times: user=0.21 sys=0.00, real=0.05 secs] 
1004626.902: [GC 1004626.902: [ParNew: 73771K->6878K(76672K), 0.0653490 secs] 10832329K->10765868K(11525824K), 0.0656210 secs] [Times: user=0.22 sys=0.00, real=0.06 secs] 

不,那不是问题。这意味着你的对象来来去去去——你在范围内创建它们,使用它们,然后它们就符合GC的条件。我不认为这表明出了什么问题

另一个极端可能是一个问题:对象被创建、老化并且停留时间过长。这就是内存泄漏和烫发空间被填满的地方。

我想你确实有问题

我不是一个阅读GC日志的专家,但我认为这意味着您有一个76672K的“年轻”空间,以及11525824K的总堆大小。此外,每个GC循环后的总堆使用率为10765868K。。。和成长。而且它(显然)花费了约30%的时间来收集垃圾

我的诊断是,您的堆几乎已满,直接导致您花费大量(并且不断增加)的时间进行垃圾收集

我的建议是重新启动应用程序(短期),并查找内存泄漏(长期)。如果没有内存泄漏(即,您的应用程序正在使用所有堆空间),那么您需要寻找减少应用程序内存使用的方法


您的应用程序似乎确实产生了一些垃圾,但这并不一定是一个问题。热点地面军事系统可以非常有效地回收垃圾。它必须处理的非垃圾数量会导致性能问题。

问题上的反对者是否能够证明其反对票的合理性?如果没有给出任何理由,那么否决票就没有真正的意义。+1是为了对抗不应有的否决票。如果它占用了30%的时间,我会说这是一个问题。至于是什么导致了它,除了大量的短期对象实例化之外,还有什么别的原因。也许您可以在代码中找到可能发生这种情况的地方,并尝试重新设计。最明显的地方是大规模的循环(有很多次迭代)。奥托,你可能是太低了。