我有一个蚂蚁项目,并成功建立。但是当我尝试运行我的PageRank程序时:etc/run.sh SequentialPageRank -input inputDirectory -output rankScore.txt -jump 0.15。终端返回以下错误:蚂蚁常春藤:堆内存不足:超过GC开销限制
Exception in thread "main" java.lang.OutOfMemoryError: GC overhead limit exceeded
at java.util.Arrays.copyOf(Arrays.java:2367)
at java.lang.AbstractStringBuilder.expandCapacity(AbstractStringBuilder.java:130)
at java.lang.AbstractStringBuilder.ensureCapacityInternal(AbstractStringBuilder.java:114)
at java.lang.AbstractStringBuilder.append(AbstractStringBuilder.java:480)
at java.lang.StringBuffer.append(StringBuffer.java:309)
at java.util.regex.Matcher.appendReplacement(Matcher.java:839)
at java.util.regex.Matcher.replaceAll(Matcher.java:906)
at java.lang.String.replaceAll(String.java:2162)
at edu.umd.cloud9.example.pagerank.SequentialPageRank.main(SequentialPageRank.java:123).
正如我估计的,SequentialPageRank程序需要大约5G-10G内存。我在一个拥有120G内存的远程超级服务器上运行这个程序。所以记忆应该够了。我搜索了一下,发现这是由于内存堆的大小很小。因此,我尝试了三种不同的解决方案:
1. export ANT_OPTS="-Xmx10000m", run this command in terminal and rebuilt by enter "ant" command.
2. Modify build.xml.
<target name="compile" depends="init,resolve" description="compile the source ">
<javac encoding="UTF-8" classpathref="lib.path.id" srcdir="${src.dir}/dist" destdir="${build.dir}" optimize="on" debug="on">
<compilerarg line="-J-Xms128m -J-Xmx10000m -Xlint:unchecked" />
</javac>
</target>
3. Modify build.xml like 2. But I modified javac option fork="true", which will fork a new JVM instead of using default ant JVM.
但是,上述3个解决方案都不起作用。我确定以上3个修改都正确运行,例如,我输入echo $ ANT_OPTS并显示“-Xms128m -Xmx10000m”。我不知道如何解决这个问题,有谁知道一个解决方案?非常感谢!
编译器并不需要那么多的内存,它是正在执行的编译代码('java命令...'你的run.sh脚本中),需要的JRE的记忆! –
哇!这可能是问题!谢谢!让我尝试。 – Jinfeng
这就是问题......谢谢! – Jinfeng