메모리 집약적 애플리케이션을 위해 JVM 최대 힙 크기 늘리기


88

2GB 이상을 사용하는 Java 메모리 집약적 애플리케이션을 실행해야하지만 힙 최대 크기를 늘리는 데 문제가 있습니다. 지금까지 다음 접근 방식을 시도했습니다.

  • -Xmx 매개 변수 설정 (예 : -Xmx3000m) 이 접근 방식은 JVM 생성시 실패합니다. 내가 검색 한 결과 -Xmx는 2GB 미만이어야합니다.

  • 은 Using + AggressiveHeap 옵션 : -XX을 . 이 방법을 시도하면 컴퓨터에 8GB의 메모리가 있어도 힙 크기가 1273.4MB라는 '메모리 부족'오류가 표시됩니다.

JVM의 최대 힙 크기를 늘릴 수있는 또 다른 방법이 있습니까? 다음은 컴퓨터 사양 요약입니다.

  • 운영체제 : Windows 7 (64 비트)
  • 프로세서 : Intel Core i7 (2.66GHz)
  • 메모리 : 8GB
  • 자바 버전 :
java version "1.6.0_18"
Java(TM) SE Runtime Environment (build 1.6.0_18-b07)
Java HotSpot(TM) Client VM (build 16.0-b13, mixed mode, sharing)

7
BTW : 최소 및 최대 메모리 크기는 이제 표준 옵션입니다. -Xms 및 -Xmx 대신 -ms 및 -mx를 사용할 수 있습니다. -엑스?? 비표준 옵션 용으로 예약되어 있습니다.
피터 Lawrey

2
어떤 JVM의 표준입니까? HotSpot JVM에 대해서는 여전히 표준이 아닙니다 (1.8 기준). docs.oracle.com/javase/8/docs/technotes/tools/unix/…
Huckle

-mx 및 -ms가 존재하고 작동하지만 공식 Java 문서 @PeterLawrey> 문서에 링크를 추가 할 수 있습니까? 감사합니다
Michal Bernhard

2
@MichalBernhard는 Java 1.1과의 하위 호환성입니다. 해당 버전에 대해 문서화되어 있지만 지금은 찾기 어려울 수 있습니다. ;)
Peter Lawrey

1
설명을 위해 @PeterLawrey에게 감사드립니다. 하지만 이제 표준이라고 말하면 Java 1.1의 표준 (이후 버전의 문서는 아님)을 의미합니까? 이상하게 보입니다 :) btw Java 1.1 문서에서 링크를 찾았고 당신이 맞습니다 : ad.ntust.edu.tw/course/ad5601701/jmdl/docs/java/tooldocs/win32/…
Michal Bernhard

답변:



96

32 비트 모드에서 JVM을 사용하는 경우 할당 할 수있는 최대 힙 크기는 1280MB입니다. 따라서 그 이상을 원한다면 64 모드에서 JVM을 호출해야합니다.

다음을 사용할 수 있습니다.

$ java -d64 -Xms512m -Xmx4g HelloWorld

어디,

  • -d64 : 64 비트 JVM을 사용합니다.
  • -Xms512m : 초기 힙 크기를 512MB로 설정합니다.
  • -Xmx4g : 최대 힙 크기를 4GB로 설정합니다.

요구 사항 (YMMV)에 따라 -Xms 및 -Xmx를 조정할 수 있습니다.

JVM 성능 조정에 대한 매우 좋은 리소스입니다. http://java.sun.com/javase/technologies/hotspot/gc/gc_tuning_6.html 을 살펴볼 수 있습니다.


내 JVM은 32 비트이며 최대 -Xmx1024M을 허용합니다. 또한 64 비트 버전을 사용해 보겠습니다.
kiltek 2013 년

JVM 64 비트를 사용해 보았는데 완벽하게 작동했습니다. 이제 4096MB의 최대 힙 크기를 설정할 수 있습니다. 32 비트와 64 비트를 모두 설치 한 경우 최소한 Windows에서는 애플리케이션의 Java 경로를 설치된 새 64 비트 버전으로 지정해야합니다. 그렇지 않으면 오류가 지속됩니다. Windows에서는 종종 시스템의 환경 변수에서 Java 경로를 변경하여 수행 할 수 있습니다.
Fabiano

최대 힙의 제한은 1280이 아니라 1700MB에 가까운 것 같습니다. 32 비트 JVM 설치에서 최대 1600MB의 힙을 사용했는데 제대로 작동했습니다.
Fabiano

명령에서 HelloWorld 인수는 무엇입니까? Linux에서 java -jar myApp.jar 명령으로 시작되는 Java 프로세스의 최대 값을 설정하려면이 명령을 어떻게 사용할 수 있습니까?
LordScone

안녕하세요, 설정할 수있는 최대 Java 힙 크기가 얼마인지 물어봐도 될까요? 응용 프로그램을 실행할 때 내 컴퓨터의 기본 -Xmx는 4GB이지만 4GB 이상으로 설정할 수 있습니까?
Ock

14

2GB 제한은 32 비트 Java 용이라고 생각합니다. v1.6은 항상 64 비트라고 생각했지만 64 비트 모드를 사용하여 -d64 옵션을 추가하십시오.


-D64 옵션이 작동하지 않았습니다. GregS가 제안한대로 64 비트 JVM을 사용해보고 결과를보고하겠습니다.
Alceu Costa

1
-d64 및 -d32 스위치는 Solaris에서만 올바르게 작동합니다 (적어도 다음 설명서에 따라) : java.sun.com/docs/hotspot/HotSpotFAQ.html#64bit_layering .
Lukasz Stelmach

두 가지 옵션을 모두 시도했습니다. -d64를 사용하면 Xmx 옵션을 지정하지 않아도 JVM이 시작되지 않습니다. -D64는 Xmx를 지정하지 않은 경우에만 작동합니다.
Alceu Costa

@Lukasz -d64 및 -d32도 Apple의 JVM에서 작동하는 것 같습니다. 그러나이 문서는 Sun의 Windows 및 Linux JVM에서 작동하지 않음을 암시하는 것 같습니다.
G__

8

32 비트 Java는 약 1.4 ~ 1.6GB로 제한됩니다.

Oracle 32 비트 힙 FAQ

인용문

32 비트 JVM의 이론상 최대 힙 한계는 4G입니다. 사용 가능한 스왑, 커널 주소 공간 사용, 메모리 조각화 및 VM 오버 헤드와 같은 다양한 추가 제약으로 인해 실제로 제한은 훨씬 낮을 수 있습니다. 대부분의 최신 32 비트 Windows 시스템에서 최대 힙 크기는 1.4G에서 1.6G입니다. 32 비트 Solaris 커널에서 주소 공간은 2G로 제한됩니다. 32 비트 VM을 실행하는 64 비트 운영 체제에서는 최대 힙 크기가 더 높아져 많은 Solaris 시스템에서 4G에 접근 할 수 있습니다.


4

아래 conf는 나를 위해 작동합니다.

JAVA_HOME=/JDK1.7.51-64/jdk1.7.0_51/
PATH=/JDK1.7.51-64/jdk1.7.0_51/bin:$PATH
export PATH
export JAVA_HOME

JVM_ARGS="-d64 -Xms1024m -Xmx15360m -server"

/JDK1.7.51-64/jdk1.7.0_51/bin/java $JVM_ARGS -jar `dirname $0`/ApacheJMeter.jar "$@"
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.