프로그램을 실행할 때마다 다음과 같은 예외가 반복적으로 발생합니다.
VM 초기화 중 오류가 발생했습니다
개체 힙을위한 충분한 공간을 예약 할 수 없습니다
자바 가상 머신을 만들 수 없습니다.
가상 메모리 (페이지 크기)와 RAM 크기를 늘리려 고했지만 아무 소용이 없습니다.
이 오류를 어떻게 제거 할 수 있습니까?
프로그램을 실행할 때마다 다음과 같은 예외가 반복적으로 발생합니다.
VM 초기화 중 오류가 발생했습니다
개체 힙을위한 충분한 공간을 예약 할 수 없습니다
자바 가상 머신을 만들 수 없습니다.
가상 메모리 (페이지 크기)와 RAM 크기를 늘리려 고했지만 아무 소용이 없습니다.
이 오류를 어떻게 제거 할 수 있습니까?
답변:
JVM을 -XX:MaxHeapSize=512m
(또는 필요한만큼 큰 숫자로) 또는 -Xmx512m
짧게 실행하십시오.
해결 방법은 다음과 같습니다.
시작-> 제어판-> 시스템-> 고급 (탭)-> 환경 변수-> 시스템으로 이동하십시오.
변수-> 신규 : 변수 이름 : _JAVA_OPTIONS
변수 값 : -Xmx512M
변수 이름 : Path
변수 값 :%PATH%;C:\Program Files\Java\jre6\bin;F:\JDK\bin;
이것을 적절한 경로로 변경하십시오.
javac를 사용할 때이 문제가 발생했으며 명령 줄 옵션에서 선택하지 않는 것 같습니다.
-bash-3.2$ javac -Xmx256M HelloWorldApp.java
Error occurred during initialization of VM
Could not reserve enough space for object heap
Error: Could not create the Java Virtual Machine.
Error: A fatal exception has occurred. Program will exit.
여기에 해결책이 있습니다. _JAVA_OPTIONS
-bash-3.2$ export _JAVA_OPTIONS="-Xmx256M"
-bash-3.2$ javac HelloWorldApp.java
Picked up _JAVA_OPTIONS: -Xmx256M
그리고 이것은 잘 컴파일됩니다.
이것은 많은 RAM을 가지고 있지만 메모리 ulimits가 낮은 컴퓨터에서 발생합니다. Java는 머신에서 램을 감지하기 때문에 큰 힙을 할당하기로 결정하지만 ulimits 때문에 할당 할 수 없습니다.
32 비트 Java를 실행하려면 메모리에 연속 여유 공간이 필요합니다. 큰 힙 크기를 지정하면 필요한 것보다 많은 사용 가능한 공간이 있어도 메모리에 너무 많은 사용 가능한 공간이 없을 수 있습니다.
이 경우 64 비트 버전의 Java를 설치하면 연속 메모리 요구 사항이 32 비트 Java에만 적용됩니다.
-Xmx512M과 결합하여 -d64를 사용하여 64 비트 VM을 실행하고 있는지 확인하십시오. 64 비트 컴퓨터에서 64 비트 가상 컴퓨터를 실행하고 있다고 생각했지만 아니요. 64 비트 Java를 설치 한 후 -d64 옵션이 작동하고 -Xmx는 훨씬 더 큰 메모리 크기를 허용합니다.
java -d64 -Xmx512M mypackage.Test
같은 오류가 발생하여 run.conf.bat에서 구성 하여이 문제를 해결했습니다.
Jboss5x에서 run.conf.bat 구성으로 JVM을 실행하십시오.
사용 가능한 메모리를 사용할 수 없으면 명령문을 전달할 때 run.conf.bat를 변경하십시오.
set "JAVA_OPTS=-Xms512m -Xmx512m -XX:MaxPermSize=256m"
때때로이 오류는 서버의 실제 메모리와 스왑이 실제로 완전히 사용됨을 나타냅니다!
최근 48GB의 RAM이있는 RedHat Enterprise Linux 5.7을 실행하는 서버에서이 문제가 발생했습니다. 나는 심지어 달리고 있음을 발견했다.
java -version
동일한 오류가 발생하여 문제가 내 응용 프로그램에만 국한되지 않는다는 것을 알았습니다.
달리는
cat /proc/meminfo
MemFree 및 SwapFree는 각각 MemTotal 및 SwapTotal 값의 1 % 미만인 것으로보고되었습니다.
MemTotal: 49300620 kB
MemFree: 146376 kB
...
SwapTotal: 4192956 kB
SwapFree: 1364 kB
컴퓨터에서 실행중인 다른 응용 프로그램을 중지하면 사용 가능한 메모리 양이 다소 늘어납니다.
MemTotal: 49300620 kB
MemFree: 2908664 kB
...
SwapTotal: 4192956 kB
SwapFree: 1016052 kB
이 시점에서 Java의 새 인스턴스가 정상적으로 시작되어 응용 프로그램을 실행할 수있었습니다.
(분명히, 이것은 임시 해결책 일뿐입니다.) 그 기계에서 실행중인 프로세스를보다 철저히 조사하여 명목상의 메모리 사용률 수준을 낮추기 위해 수행 할 수있는 작업이 있는지 확인하는 뛰어난 작업이 여전히 남아 있습니다. 응용 프로그램을 중지해야합니다.)
java -version
상위 몇 가지 무료 여전히를 보였다 비록 실패 : | (또한 VM 초기화 중에 오류가 발생했다고 카드 마킹 배열에 충분한 공간을 확보하지 못했습니다). 픽스가 가장 많이 실행되는 것으로 보였고, 어떤 프로세스가 가장 많은 RAM (VIRT 열)을 사용하고 있었는지 찾아내어 죽이십시오 [postgres, appdynamics for me] : |
오류의 경우, "vm을 초기화하는 동안 오류가 발생하여 오브젝트 힙 jboss에 충분한 공간을 예약 할 수 없습니다"
아래 언급 된대로 JVM에 메모리 할당이 잘못되었거나 부족합니다.
예를 들어 JAVA_OPTS = "- Xms1303m -Xmx1303m -XX :를 MaxPermSize = 256m" 에 제이 보스-EAP-6.2 \ 빈 \ standalone.conf 또는 "JAVA_OPTS = -Xms1G -Xmx1G -XX :를 MaxPermSize = 256M" 제이 보스-EAP-6.2 \ 빈에서 \ standalone.conf.bat는 JVM 메모리 할당 풀 매개 변수에 지나지 않습니다.
일반적으로 최소 및 최대 크기가 동일하도록 권장되지 않았습니다.
일식에서 애플리케이션을 실행중인 경우,
java -Xgcprio:throughput -Xmx:64m -Xms:64m myApp
"
사용 가능한 메모리가 충분하고 JVM 인수를 올바르게 설정했다고 가정하면 메모리 조각화에 문제가있을 수 있습니다. Windows XP에서 Java 최대 메모리를 확인하십시오 .
시작-> 제어판-> 시스템-> 고급 (탭)-> 환경 변수-> 시스템 변수-> 새로 이동 :
Variable name: _JAVA_OPTIONS
Variable value: -Xmx512M
Java 프로그램을 실행중인 경우 :-Linux의 올바른 명령을 사용하여 터미널에서 프로그램을 실행하면 'java -jar myprogram.jar'이되고 -Xms256m -Xmx512m이 추가됩니다 (예 : 'java -jar myprogram.jar). Xms256m -Xmx512m '
.sh 스크립트 (linux, mac?) 또는 .bat 스크립트 (windows)를 실행중인 경우 스크립트를 열고 java 옵션이 있으면 찾아보고 메모리를 늘리십시오.
위의 모든 기능이 작동하지 않으면 프로세스 (Windows에서 Ctrl + Alt + Delete) (linux / mac에서 p aux)를 확인하고 메모리 할당량을 사용하고 운영 체제에 필요하지 않은 프로세스를 종료하십시오! => 프로그램을 다시 실행하십시오.
아래와 같이 POM 파일에서 chnage를 할 필요가 없습니다.
<configuration>
<maxmemory>1024M</maxmemory>
</configuration>