1. ホーム
  2. Linux

Java Runtime Environmentを継続するためのメモリが不足しています。

2022-02-17 11:19:58

Centos 6.4 X64、JDK 1.7 U21 環境で mahout 0.9 with hadoop 1.2.1 を実行し、5GB のデータを処理すると、システムから There is insufficient memory for Java Runtime Environment to continue と表示されました。


14/07/15 08:46:05 INFO mapred.JobClient: タスクID : attempt_201407141818_0002_m_000018_0, ステータス : FAILED
java.lang.Throwable: 子エラー
        at org.apache.hadoop.mapred.TaskRunner.run(TaskRunner.java:271)
原因:java.io.IOException。タスクプロセス終了時にステータス 1 が 0 以外で終了しました。
        at org.apache.hadoop.mapred.TaskRunner.run(TaskRunner.java:258)
attempt_201407141818_0002_m_000018_0: #
attempt_201407141818_0002_m_000018_0: # Java実行環境のメモリが不足しているため、続行できません。
attempt_201407141818_0002_m_000018_0: # GCスレッドを作成することができません。
attempt_201407141818_0002_m_000018_0: # 詳細な情報を含むエラー報告ファイルが保存されています。
attempt_201407141818_0002_m_000018_0: # /home/hadoop/hd_space/mapred/local/taskTracker/hadoop/jobcache/job_201407141818_0002/attempt _201407141818_0002_m_000018_0/work/hs_err_pid25377.log
14/07/15 08:46:07 INFO mapred.JobClient: マップ 15% リデュース 0%。
14/07/15 08:46:09 INFO mapred.JobClient: マップ 16% リデュース 0%。
14/07/15 08:46:09 INFO mapred.JobClient: タスクID : attempt_201407141818_0002_m_000018_1, ステータス : FAILED
java.lang.Throwable: 子エラー
        at org.apache.hadoop.mapred.TaskRunner.run(TaskRunner.java:271)
原因:java.io.IOException。タスクプロセス終了時にステータス 1 が 0 以外で終了しました。
        at org.apache.hadoop.mapred.TaskRunner.run(TaskRunner.java:258)
attempt_201407141818_0002_m_000018_1: #
attempt_201407141818_0002_m_000018_1: # Java Runtime Environment を続行するには、メモリが不足しています。
attempt_201407141818_0002_m_000018_1: # システムリソースが不足しているため、GCスレッドを作成できません。
attempt_201407141818_0002_m_000018_1: # 詳細な情報を含むエラーレポートファイルが保存されます。


システム制限の表示

[root@NameNode ~]# ulimit -a
コアファイルのサイズ(ブロック数、-c)無制限
データセグサイズ (kbytes, -d) 無制限
スケジューリング優先度 (-e) 0
ファイルサイズ(ブロック数、-f)無制限
保留信号 (-i) 2066288
最大ロックメモリ (kbytes, -l) 64
最大メモリサイズ (kbytes, -m) 無制限
<スパン オープンファイル                      (-n) <スパン 1024
パイプサイズ (512 バイト, -p) 8

ファイル数が少なすぎます。表示 システムの /etc/security/limit.conf, etc/sysctl.conf, JDKのバージョン変更など、すべて無駄だった! Rootでulimit -c unlimitedを設定した後、まだ動作しない。

[hadoop@NameNode mahout-distribution-0.9]$ ulimit -a
最大ユーザープロセス数 (-u) <スパン 1024


仮想メモリ(kbytes、-v) 無制限

ということを確認した上で etc/security/ の下を見てください。centos6 では limits.d ディレクトリが追加され、その下に 90-nproc.config というファイルがあります。
このファイルの読み方
<スパン # 防止すべきユーザーのプロセス数のデフォルトの制限値
# 偶発的なフォークボム
# 理由は rhbz #432903 を参照してください。
* ソフト nproc 1024
ルートソフト nproc 無制限
1024までなので、コメントアウトします。

<スパン 問題解決