0

我已经从 SVN 19 项目中签出,所有项目都在代码源目录中。我使用以下命令从 jenkins 运行索引:

C:\Jenkins\workspace\Grok-Multiple-Projects-Checkout-And-Indexing>java -Xmx12288m -Xms2048m -jar C:\grok_0.12.1\opengrok-0.12.1.5\lib\opengrok.jar -W C:\grok_0.12.1\Data\configuration.xml -c C:\grok_0.12.1\ctags58\ctags.exe -P -S -v -s C:\grok_0.12.1\src -d C:\grok_0.12.1\Data -i *.zip -i *.tmp -i *.db -i *.jar -i d:.svn -G -L polished -a on -T 8 

我第一次使用上面的命令运行索引:没有错误!

但是,连续运行会产生

Java.lang.OutOfMemoryError: Java heap space

它运行良好,直到日志中的某个点挂起大约 30 分钟,并且在某些时候内存消耗会增加,直到它耗尽所有分配的 12GB RAM。

这是日志:

09:38:40 Nov 01, 2016 9:38:45 AM org.opensolaris.opengrok.index.IndexDatabase$1 run
09:38:40 SEVERE: Problem updating lucene index database: 
09:38:40 java.lang.OutOfMemoryError: Java heap space
09:38:40 
09:38:41 Nov 01, 2016 9:38:45 AM org.opensolaris.opengrok.util.Statistics report
09:38:41 INFO: Done indexing data of all repositories (took 0:37:20)
09:38:41 Nov 01, 2016 9:38:45 AM org.opensolaris.opengrok.util.Statistics report
09:38:41 INFO: Total time: 0:37:21
09:38:41 Nov 01, 2016 9:38:45 AM org.opensolaris.opengrok.util.Statistics report
09:38:41 INFO: Final Memory: 19M/11,332M

关于它为什么需要这么多内存以及如果增加内存的任何想法都将解决 OOM 错误。它可能是opengrok中的内存泄漏吗?

4

1 回答 1

0

我知道这是旧 OpenGrok 版本的老问题(我可以说是因为 OpenGrokorg.opensolaris在 2018 年删除了类前缀),但我认为它仍然需要一些答案。

假设索引器确实在执行增量重新索引,那么肯定存在过度消耗堆的东西。例如,它可能是由于将预先存在的历史与新添加的(增量)历史合并造成的。

使用 Java 选项运行索引器-XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/data/jvm/将创建一个堆转储,然后可以使用 MAT (Eclipse) 或 YourKit 等工具对其进行分析。

至于内存泄漏:并不是说不可能在 Java 中创建内存泄漏(通过线程本地存储),它们不太可能出现在索引器中。

于 2021-05-13T16:20:34.240 回答