개체 힙을위한 충분한 공간을 예약 할 수 없습니다


277

프로그램을 실행할 때마다 다음과 같은 예외가 반복적으로 발생합니다.

VM 초기화 중 오류가 발생했습니다

개체 힙을위한 충분한 공간을 예약 할 수 없습니다

자바 가상 머신을 만들 수 없습니다.

가상 메모리 (페이지 크기)와 RAM 크기를 늘리려 고했지만 아무 소용이 없습니다.

이 오류를 어떻게 제거 할 수 있습니까?



2
내 가상 머신에서 jdk / jre 1.6을 사용할 때이 오류가 발생하고 주석에 제공된 구성 값을 변경하려고 시도했지만 jdk 1.7로 업데이트 한 후에 오류가 사라지고 더 큰 Xmx 매개 변수가 적용되었습니다. Java 1.6 이후 힙 사용량에 많은 변경 사항이있는 것 같습니다.
Alexander.Iljushkin

답변:


214

JVM을 -XX:MaxHeapSize=512m(또는 필요한만큼 큰 숫자로) 또는 -Xmx512m짧게 실행하십시오.


42
또는 더 짧은 -mx256m 또는 -mx512m;)
Peter Lawrey

8
-mx는 -Xmx 및 -XX : MaxHeapSize와 동일합니까?
Erty Seidohl

19
감사합니다 .. 너무 큰 숫자도 문제가 될 수 있으며 같은 오류를 줄 수 있습니다!
Dinesh Rajan

17
실제로 100 % 작동하는 솔루션을 찾았습니까? 이 솔루션은 문제를 일시적으로 해결하지만 갑자기 다시 나타납니다. 나는 16GB 램을 가지고 있고이 sh * t에 지쳤다. 옛날에는 모든 것이 더 나았습니다 : [
Nilzor

6
x86 또는 x64 Java가 설치된 Windows 8에서는 작동하지 않습니다.
AndrewSmiley

128

이는 32 비트 HotSpot VM에서 너무 큰 것을 설정하여 발생할 수도 있습니다. 예를 들면 다음과 같습니다.

-Xms1536m -Xmx1536m

이것이 작동 할 수 있는 곳 :

-Xms1336m -Xmx1336m

5
32 비트 명령 셸에서 시작하는 동안이 문제가 발생해야한다는 점을 언급하지 않았습니다. 64 비트 명령 셸에는이 문제가 없을 수 있습니다.
djangofan

나를 위해 기본값과 너무 큰 값으로 실패 했으므로 여러 값을 시도하십시오. 답변 해주셔서 감사합니다!
Trax

47

해결 방법은 다음과 같습니다.

  • 시작-> 제어판-> 시스템-> 고급 (탭)-> 환경 변수-> 시스템으로 이동하십시오.

    변수-> 신규 : 변수 이름 : _JAVA_OPTIONS 변수 값 : -Xmx512M 변수 이름 : Path
    변수 값 :%PATH%;C:\Program Files\Java\jre6\bin;F:\JDK\bin;

이것을 적절한 경로로 변경하십시오.


1
이 답변 과 매우 유사합니다 .
That1Guy

좋아요 위와 함께 이것도 참조하십시오. stackoverflow.com/a/9350506/967638
Amarnath

46

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 때문에 할당 할 수 없습니다.


1
_JAVA_OPTIONS를 지적하기위한 +1-필자의 경우 java는 쓰기 액세스 권한이없는 쉘 스크립트의 깊은 곳에서 호출되므로이 옵션이 바람직하다.
gerrit

여기도 마찬가지입니다. 대학 컴퓨터를 사용하고 있으므로 관리자가 아니며 (환경 변수를 변경할 수 없음) 명령 줄 옵션이 전혀 작동하지 않았습니다. 정말 고마워!
Kimbluey

38

32 비트 Java를 실행하려면 메모리에 연속 여유 공간이 필요합니다. 큰 힙 크기를 지정하면 필요한 것보다 많은 사용 가능한 공간이 있어도 메모리에 너무 많은 사용 가능한 공간이 없을 수 있습니다.

이 경우 64 비트 버전의 Java를 설치하면 연속 메모리 요구 사항이 32 비트 Java에만 적용됩니다.


1
-Xmx [bignumber] m 옵션을 사용한 후에도 계속 오류가 발생하는 경우이 방법이 최선의 방법이라고 생각합니다. Apache jMeter를 올바르게 실행하는 데 도움이되었습니다.
RuudvK

나는 주요 활동 생성 된 자동 이외의 코드와 함께, 새로운 프로젝트를 생성하고,이 오류가 발생
behelit

1
나는 두 번째 @RuudvK. 64 비트를 설치하면 메모리 할당 오류를 지우면서 최대 메모리를 늘릴 수있었습니다. 이것은 정답입니다.
J Weezy

28

-Xmx512M과 결합하여 -d64를 사용하여 64 비트 VM을 실행하고 있는지 확인하십시오. 64 비트 컴퓨터에서 64 비트 가상 컴퓨터를 실행하고 있다고 생각했지만 아니요. 64 비트 Java를 설치 한 후 -d64 옵션이 작동하고 -Xmx는 훨씬 더 큰 메모리 크기를 허용합니다.

java -d64 -Xmx512M mypackage.Test

4
이 답변은 맨 위에 있어야합니다. 64 비트 Java를 설치하면 문제가 해결되었다는 사실을 알기 위해이 문제를 해결하기 위해 2 개월을 보냈습니다 (필자의 경우에는 -d64 옵션이 필요하지 않았습니다)
Nilzor

_JAVA_OPTIONS를 선택했습니다. -d64 -Xmx1024M 인식 할 수없는 옵션 : -d64 JVM을 시작할 수 없습니다. 최대 힙 크기 (-Xmx)가 너무 크거나 바이러스 백신 또는 방화벽 도구가 실행을 차단할 수 있습니다.
Alexander

14

같은 오류가 발생하여 run.conf.bat에서 구성 하여이 문제를 해결했습니다.

Jboss5x에서 run.conf.bat 구성으로 JVM을 실행하십시오.

사용 가능한 메모리를 사용할 수 없으면 명령문을 전달할 때 run.conf.bat를 변경하십시오.

set "JAVA_OPTS=-Xms512m -Xmx512m -XX:MaxPermSize=256m"

7

나는 이미 여기에 많은 대답이 있다는 것을 알고 있지만 아무도 나를 도우 지 못했습니다. 결국 파일을 열고 /etc/elasticsearch/jvm.options변경했습니다.

-Xms2G
-Xmx2G

-Xms256M
-Xmx256M

그것은 나를 위해 그것을 해결했다. 잘하면 이것은 다른 누군가를 도와줍니다.


7

비슷한 문제가있었습니다. 64 비트 시스템에 32 비트 버전의 Java를 설치했습니다.

해당 버전을 설치 제거하고 64 비트 버전의 Java를 설치합니다. 문제를 해결할 수있었습니다.


6

클래스가 Testpackage에서 호출되었다고 가정하십시오 mypackage. 다음과 같이 코드를 실행하십시오.

java -Xmx1024m mypackage.Test

코드에 1024MB의 힙 공간이 예약됩니다. 512MB를 원하면 다음을 사용할 수 있습니다.

java -Xmx512m mypackage.Test

거의 m를 사용 1024m, 512m


6

때때로이 오류는 서버의 실제 메모리와 스왑이 실제로 완전히 사용됨을 나타냅니다!

최근 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] : |
rogerdpack

메모리 조각화 때문일 수 있습니까? 위의 답변은 인접한 여유 공간에 대해 언급합니다.
Rick Moritz

6

오류 :

오류의 경우, "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 메모리 할당 풀 매개 변수에 지나지 않습니다.

해결 :

  • 힙 크기를 늘리십시오. 힙 크기를 늘리려면
  • goto-> jboss-eap-6.2 \ bin \ standalone.conf.bat 또는 jboss-eap-6.2 \ bin \ standalone.conf
  • change-> JAVA_OPTS = "-Xms256m -Xmx512m -XX : MaxPermSize = 256m"여기서 -Xms는 최소 힙 크기이고 -Xmx는 최대 힙 크기입니다.
  • 일반적으로 최소 및 최대 크기가 동일하도록 권장되지 않았습니다.

  • 일식에서 애플리케이션을 실행중인 경우,

  • 서버를 두 번 클릭하십시오
  • '오픈 시작 구성'을 선택하면 '시작 구성 속성 편집'창으로 리디렉션됩니다.
  • 이 창에서 '(x) = 인수'탭으로 이동하십시오.
  • VM Arguments에서 아래에 언급 된대로 힙 크기를 정의하십시오.
  • "-Dprogram.name = JBossTools : JBoss EAP 6.1+ 런타임 서버"-server -Xms256m -Xmx512m -XX : MaxPermSize = 256m -Dorg.jboss.resolver.warning = true

Oracle Command Line Reference 의 인용문 : " 최상의 성능을 위해 -Xms를 최대 힙 크기와 동일한 크기로 설정하십시오.java -Xgcprio:throughput -Xmx:64m -Xms:64m myApp "
user1438038

3

나는 최근 에이 문제에 직면했다. 1024m 또는 1280m 힙 크기로 시작하는 3 개의 Java 응용 프로그램이 있습니다. Java가 스왑에서 사용 가능한 공간을보고 있으며 사용 가능한 메모리가 충분하지 않으면 jvm이 종료됩니다.

이 문제를 해결하기 위해 많은 양의 가상 메모리가 할당 된 여러 프로그램을 종료해야했습니다.

64 비트 jvm으로 x86-64 Linux에서 실행 중이었습니다.


3

나는 적절한 양의 메모리 설정을 가지고 있었지만 32 비트 jvm과 함께 64 비트 인텔리를 사용하고있었습니다. 64 비트 VM으로 전환하면 오류가 사라졌습니다.



2

32 비트 JVM을 실행중인 경우 힙 크기를 더 작게 변경하면 도움이됩니다. args를 java에 직접 전달하거나 다음과 같은 환경 변수를 통해 전달하면됩니다.

java -Xms128M -Xmx512M
JAVA_OPTS="-Xms128M -Xmx512M"

64 비트 JVM의 경우 더 큰 힙 크기 -Xms512M -Xmx1536M 가 작동해야합니다.

실행 java -version하거나 java -d32, java--d64Java7에 대한 당신이 실행중인 버전을 확인합니다.


1

어쨌든, 수정 방법은 다음과 같습니다. 시작-> 제어판-> 시스템-> 고급 (탭)-> 환경 변수-> 시스템 변수-> 새로 만들기 : 변수 이름 : _JAVA_OPTIONS 변수 값 : -Xmx512M

또는

아래와 같이 개미 전화를 변경하십시오.

   <exec
        **<arg value="-J-Xmx512m" />**
    </exec>

그것은 나를 위해 일했다.


1

VM 초기화 중에 오류가 발생했습니다. 1572864KB 오브젝트 힙에 충분한 공간을 예약 할 수 없습니다.

settings.grade 파일 1536에서 메모리의 값을 512로 변경했는데 도움이되었습니다.


1

시작-> 제어판-> 시스템-> 고급 (탭)-> 환경 변수-> 시스템 변수-> 새로 이동 :

Variable name: _JAVA_OPTIONS
Variable value: -Xmx512M

이것을 전역으로 설정하면 IntelliJ에 제공 할 수있는 힙 크기가 제한됩니다.
user3056052

0

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)를 확인하고 메모리 할당량을 사용하고 운영 체제에 필요하지 않은 프로세스를 종료하십시오! => 프로그램을 다시 실행하십시오.


0

CASSANDRA_HOME / bin / cassandra.bat에는 다음 구성이 있습니다.

REM JVM Opts we'll use in legacy run or installation
set JAVA_OPTS=-ea^
 -javaagent:"%CASSANDRA_HOME%\lib\jamm-0.3.0.jar"^
 -Xms**2G**^
 -Xmx**2G**^

1G 이하의 경우 2G를 더 작은 수로 줄일 수 있으며 작동해야합니다.

유닉스 상자에서 실행하는 경우에도 마찬가지입니다. .sh 파일을 적절히 변경하십시오.


0

같은 오류가 발생하여 % temp %를 사용하여 임시 파일을 삭제하고 이클립스를 다시 시작하면 해결되었습니다.


0

때때로 그것은

$ sysctl vm.overcommit_memory
vm.overcommit_memory = 2

설정 한 경우 :

$ sysctl vm.overcommit_memory=0

작동해야합니다.


0

교체 -Xmx2G-Xms512M또는 카산드라의 bin 디렉토리에 cassandra.bat 파일에있는 더 큰 메모리 크기.


0

android 폴더에서 gradle.properties 파일을여십시오.

이 줄을 바꾸십시오 :

org.gradle.jvmargs=-Xmx1536M

와:

org.gradle.jvmargs=-Xmx512m

설명 : Gradle 문서의 최대 한계 :

요청 된 빌드 환경이 최대 힙 크기를 지정하지 않으면 데몬은 최대 512MB의 힙을 사용합니다.


-2

아래와 같이 POM 파일에서 chnage를 할 필요가 없습니다.

<configuration>
    <maxmemory>1024M</maxmemory>
</configuration>

2
누가 POM 파일에 대해 말했습니까?
Henley Chiu
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.