「java -version」がクラッシュするのはなぜですか?

「java -version」がクラッシュするのはなぜですか?

Ubuntu Linux 10.10 では (10.04 でも同じ問題が発生しました)、java (openjdk-6-jre-headless から) が不明な理由でクラッシュします。

me@ub:~$ java -version 
#
# A fatal error has been detected by the Java Runtime Environment:
#
# java.lang.OutOfMemoryError: requested 304 bytes for CHeapObj-new. Out of swap space?
#
#  Internal Error (allocation.inline.hpp:39), pid=14459, tid=140557172041488
#  Error: CHeapObj-new
#
# JRE version: 6.0_20-b20
# Java VM: OpenJDK 64-Bit Server VM (17.0-b16 mixed mode linux-amd64 )
# Derivative: IcedTea6 1.9.1
# Distribution: Ubuntu 10.10, package 6b20-1.9.1-1ubuntu3
# An error report file with more information is saved as:
# /home/me/hs_err_pid14459.log

空きメモリはたくさんあるので、それが原因ではありません。別のユーザーとしてログインすると、動作します。

guests@ub:~$ java -version 
java version "1.6.0_20"
OpenJDK Runtime Environment (IcedTea6 1.9.1) (6b20-1.9.1-1ubuntu3)
OpenJDK 64-Bit Server VM (build 17.0-b16, mixed mode)

したがって、クラッシュは私が行ったいくつかのローカル変更によって発生したようです。

  • どちらのユーザーも JAVA* 環境変数が設定されていません。
  • クラッシュは現在の作業ディレクトリに依存しません。
  • strace によると、ホーム ディレクトリ内のファイルは開かれていません。

何が原因か全く分かりません。どんな助けでもいただければ幸いです。

答え1

この問題は、/etc/security/limits.conf で「アドレス空間制限」を 1GB に設定したことが原因でした。何らかの理由で、Java を起動するには 1GB を超える仮想メモリが必要です。

wojdyr@ub:~$ java -version 
java version "1.6.0_20"
OpenJDK Runtime Environment (IcedTea6 1.9.1) (6b20-1.9.1-1ubuntu3)
OpenJDK 64-Bit Server VM (build 17.0-b16, mixed mode)
wojdyr@ub:~$ ulimit -Sv 1048576
wojdyr@ub:~$ java -version 
#
# A fatal error has been detected by the Java Runtime Environment:
#
# java.lang.OutOfMemoryError: requested 304 bytes for CHeapObj-new. Out of swap space?
#
#  Internal Error (allocation.inline.hpp:39), pid=3319, tid=140563844388624
#  Error: CHeapObj-new

なぜそんなに多くのメモリが必要なのか理解できません。私が使用している他のすべてのプログラムは 1GB の制限で正常に動作します。とにかく、問題は解決しました。

関連情報