오늘날 Java 애플릿이 인기 있는 웹 기술은 아니지만 Linux 서버에 Java 가상 머신을 직접 배포해야 하는 이유는 무수히 많습니다. 개별 하드웨어 또는 자체 VM 내부에서 Linux Java 명령을 완전히 실행하려고 하면 "VM 초기화 중 오류가 발생하여 개체 힙을 위한 충분한 공간을 확보할 수 없습니다" 메시지가 표시될 수 있습니다.
명령을 실행하기에 충분한 RAM이 있을 가능성이 높기 때문에 이것은 다소 이상해 보일 수 있지만, 이는 주로 물리적 및 가상 메모리 페이지가 사용되는 방식의 특정 기이함 때문입니다. 비교적 큰 크기를 지정하면 이 메시지를 완전히 무시하고 다른 것과 같은 방식으로 java 명령을 실행할 수 있습니다.
방법 1:명령줄 옵션 사용
Java를 실행하려고 시도했는데 이 메시지가 표시되면 프로그램을 실행할 충분한 메모리가 있는지 확인하기 위해 이미 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가 더 낮기 때문입니다. Java는 메모리 부족으로 해석하여 할당할 수 없는 거대한 블록을 할당하려고 시도합니다.
방법 3:현재 자바 옵션 인쇄
명령줄에서 작업 중이고 현재 _JAVA_OPTIONS 값을 설정한 것에 대한 빠른 참조를 원하는 경우 echo $_JAVA_OPTIONS를 실행하기만 하면 현재 값이 즉시 인쇄됩니다. 이것은 시도할 올바른 숫자를 파악하려고 할 때 문제를 해결하는 데 유용합니다.
이 수정 프로그램은 다른 방법을 필요로 하지 않지만, 가상 메모리가 부족하다는 사실을 알게 되면 Java에서 "객체 힙을 위한 충분한 공간을 확보할 수 없습니다"라는 메시지를 표시합니다. 이 경우 현재 실행 중인 프로세스를 다시 확인하고 옵션인 경우 서버를 다시 시작할 수 있습니다. 더 많은 스왑 공간을 만들 수도 있지만 이것이 문제라면 일반적으로 다른 방법으로 수정하는 것이 좋습니다.
드물게 설정이 올바른 것 같지만 여전히 작동하지 않는 경우 이 문제에 영향을 받지 않는 64비트 Java 패키지를 설치했는지 확인하십시오. 연속 메모리 요구 사항은 32비트 버전의 Java에만 적용됩니다. 우리는 64비트 버전이 32비트 가상 머신을 생성하려고 시도하는 소수의 경우를 찾았으므로 명령줄에서 -d64 옵션을 지정하면 문제가 해결되었습니다.