수정 : VM 초기화 중 오류가 발생하여 개체 힙을위한 충분한 공간을 예약 할 수 없습니다.

요즘 Java 애플릿이 인기있는 웹 기술은 아니지만 Linux 서버에 직접 Java 가상 머신을 배포해야하는 이유는 무수히 많습니다. 개별 하드웨어 또는 자체 VM 내부에서 Linux java 명령을 완전히 실행하려고하면 "VM 초기화 중에 오류가 발생하여 개체 힙을위한 충분한 공간을 예약 할 수 없습니다"메시지가 표시 될 수 있습니다.

명령을 실행하기에 충분한 RAM이있을 가능성이 높기 때문에 다소 이상하게 보일 수 있지만, 이는 주로 실제 및 가상 메모리 페이지가 사용되는 방식의 특정 기이 한 때문입니다. 비교적 큰 크기를 지정하면이 메시지를 완전히 건너 뛰고 다른 방식으로 java 명령을 실행할 수 있습니다.

방법 1 : 명령 줄 옵션 사용

자바를 실행하려고했는데이 메시지가 표시 되었다면 프로그램을 실행할 충분한 메모리가 있는지 확인하기 위해 이미 free 명령을 실행했을 것입니다.

자바 및 무료 명령

테스트 머신에는 2.3GB의 실제 RAM이 있었지만 아직 한 페이지의 가상 메모리가 사용되지 않았습니다. 메모리 크런치가 있음을 발견하면 다시 시도하기 전에 실행중인 다른 항목을 닫고 싶을 것입니다. 반면에 여유 메모리가 충분하다는 것을 알게 된 사람들은 크기를 직접 지정할 수 있습니다.

예를 들어, 우리 컴퓨터에서 java -Xms256m -Xmx512M 명령을 실행할 수 있었고 다른 방법으로 예상했던 것처럼 작동했습니다. 이는 JVM (Java Virtual Machine)이 시작시 예약하려고 시도하는 힙 크기를 제한합니다. 제한되지 않은 가상 머신은 가설 적으로 비정상적인 작업을 수행 할 수 있으므로 자유 시스템에서 오류 메시지를 표시 할 수 있습니다. 올바른 조합을 찾기 전에이 두 값을 가지고 놀 수도 있습니다.

JVM은 GNU / Linux를 실행하는 데 사용할 수있는 VM 유형과 관련이 없기 때문에 실행중인 항목에 관계없이 문제가 될 수 있습니다.

방법 2 : 변경 내용을 영구적으로 만들기 위해 변수 내보내기

작동하는 값을 찾으면이를 내 보내서 해당 세션에 대해 영구적으로 만들 수 있습니다. 예를 들어 bash 명령 프롬프트에서 export _JAVA_OPTIONS = '-Xms256M -Xmx512M'을 사용했으며 서버에서 로그 아웃 할 때까지 다른 옵션없이 java 명령을 단독으로 실행할 수있었습니다.

다른 세션에 로그인 할 때 다시 실행해야하므로 java 명령을 자주 사용하려는 경우 관련 시작 스크립트에 추가 할 수 있습니다. .bash_login 파일에 줄을 추가했고 로그인 프롬프트를 다시 실행할 필요없이 사용할 때마다 작동하는 것처럼 보였지만 다른 쉘로 작업하는 경우 다른 위치를 찾아야 할 수도 있습니다.

특정 하드웨어 구성 만이 오류 메시지를 트리거한다는 것을 알 수 있습니다. 그것은 일반적으로 많은 양의 물리적 RAM이 있지만 사용 방법에 대한 ulimit가 낮은 시스템에서 발생하기 때문입니다. 자바는 할당 할 수 없다는 메시지를 받기 위해서만 거대한 블록을 할당하려고 시도하며, 이는 메모리 부족으로 해석됩니다.

방법 3 : 현재 Java 옵션 인쇄

명령 줄에서 작업 중이고 현재 _JAVA_OPTIONS 값을 설정 한 항목에 대한 빠른 참조를 원한다면 echo $ _JAVA_OPTIONS를 실행하면 현재 값이 즉시 인쇄됩니다. 이것은 시도 할 올바른 숫자를 알아 내려고 할 때 문제를 해결하는 데 유용합니다.

이 수정 사항은 다른 작업을 필요로하지 않지만 Java는 가상 메모리가 부족한 경우 "객체 힙을위한 충분한 공간을 예약 할 수 없습니다"라는 메시지를 표시합니다. 이 경우 현재 실행중인 프로세스를 다시 확인하고 옵션 인 경우 서버를 다시 시작할 수 있습니다. 더 많은 스왑 공간을 만들 수도 있지만 이것이 문제라면 일반적으로 다른 방법으로 수정하는 것이 좋습니다.

드물게 설정이 올바른 것 같지만 여전히 작동하지 않는 경우 64 비트 Java 패키지가이 문제에 영향을받지 않아야하므로 설치했는지 확인하십시오. 연속 메모리 요구 사항은 32 비트 버전의 Java에만 적용됩니다. 64 비트 버전이 32 비트 가상 머신을 만들려고 시도한 경우가 많았으므로 명령 줄에서 -d64 옵션을 지정하면 문제가 해결되었습니다.