왜 "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

문제는 "주소 공간 제한"을 1GB로 설정한 /etc/security/limits.conf의 설정으로 인해 발생했습니다. 어떤 이유로 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 제한으로 잘 작동합니다. 어쨌든 문제는 해결되었습니다.

관련 정보