1

我需要执行包含在 JAR 文件中的 java 程序,但我收到一个需要增加 java 堆大小的错误。我需要使用命令行增加堆大小。我试过 java -Xmx6144M -d64 但没有用。另一方面,java -Xmx6144M ClassName 需要 ClassName。如何指定 jar 中的类名?是否有一些命令可以增加所有类的 java 堆?

这是错误:

ava.lang.OutOfMemoryError: GC overhead limit exceeded
    at java.util.regex.Pattern.compile(Pattern.java:1047)
    at java.lang.String.replace(String.java:2180)
    at org.apache.hadoop.fs.Path.normalizePath(Path.java:146)
    at org.apache.hadoop.fs.Path.initialize(Path.java:137)
    at org.apache.hadoop.fs.Path.<init>(Path.java:126)
    at org.apache.hadoop.fs.Path.makeQualified(Path.java:296)
    at org.apache.hadoop.fs.RawLocalFileSystem$RawLocalFileStatus.<init>(RawLocalFileSystem.java:375)
    at org.apache.hadoop.fs.RawLocalFileSystem.getFileStatus(RawLocalFileSystem.java:359)
    at org.apache.hadoop.fs.RawLocalFileSystem.listStatus(RawLocalFileSystem.java:290)
    at org.apache.hadoop.fs.FileSystem.listStatus(FileSystem.java:721)
    at org.apache.hadoop.fs.FileSystem.listStatus(FileSystem.java:746)
    at org.apache.hadoop.fs.ChecksumFileSystem.listStatus(ChecksumFileSystem.java:465)
    at org.apache.hadoop.fs.FileSystem.listStatus(FileSystem.java:721)
    at org.apache.hadoop.fs.FileSystem.listStatus(FileSystem.java:746)
    at org.apache.hadoop.mapreduce.lib.input.FileInputFormat.listStatus(FileInputFormat.java:212)
    at org.apache.hadoop.mapreduce.lib.input.FileInputFormat.getSplits(FileInputFormat.java:241)
    at org.apache.hadoop.mapred.LocalJobRunner$Job.run(LocalJobRunner.java:120)
4

1 回答 1

2

我相信您需要为已启动的地图任务增加内存分配。默认值为 200 MB,这在您的情况下似乎是不够的。如果驱动程序类是 Tool 的子类,则可以传递以下参数 -Dmapred.child.java.opts=-Xmx500m 。在这里,您将内存从 200 增加到 500。

您还可以对 map reduce 作业进行分析,以查看哪些对象正在占用内存。

于 2013-09-04T17:14:34.980 回答