【问题标题】:Opengrok OutOfMemoryError when re-indexingOpengrok OutOfMemoryError 重新索引时
【发布时间】:2017-03-14 08:39:12
【问题描述】:

我已经从 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中的内存泄漏吗?

【问题讨论】:

  • 您确定它实际上使用的是 12GB 吗?默认情况下,要使用的内存量是有限制的。
  • 将 Grok 更新到最新版本解决了 OOM 问题

标签: reindex opengrok


【解决方案1】:

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

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-09
    • 1970-01-01
    相关资源
    最近更新 更多