2014-01-17 116 views
1

我有一个蚂蚁项目,并成功建立。但是当我尝试运行我的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”。我不知道如何解决这个问题,有谁知道一个解决方案?非常感谢!

+0

编译器并不需要那么多的内存,它是正在执行的编译代码('java命令...'你的run.sh脚本中),需要的JRE的记忆! –

+0

哇!这可能是问题!谢谢!让我尝试。 – Jinfeng

+0

这就是问题......谢谢! – Jinfeng

回答

0

尝试指定此JVM选项-XX:+UseConcMarkSweepGC

+0

将此选项添加到? – Jinfeng

+0

不,请将此参数提供给正在运行脚本java -XX:+ UseConcMarkSweepGC ... SequentialPageRank的应用程序 – aljipa

+0

好的,谢谢。让我试试这个。 – Jinfeng