為什麼“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 限制下都可以正常工作。無論如何,問題解決了。

相關內容