2009-10-06 7 views
16

Jruby를 사용하는 중에이 메시지가 표시됩니다.java.lang.OutOfMemoryError : Java 힙 공간

Complete Java stackTrace 
java.lang.OutOfMemoryError: Java heap space 

해결 방법은 무엇입니까?

+0

힙에 더 적은 수의 개체를 할당하려고합니다. 실행할 코드를 이해할 수 있도록 코드 스 니펫을 게시 할 수 있습니까? –

+0

가능한 복제본 "java.lang.OutOfMemoryError : Java 힙 공간"오류 (64MB 힙 크기)를 처리하는 방법] (http://stackoverflow.com/questions/37335/how-to-deal-with-java- java-heap-space-error-64-mb-heap) – Mark

답변

2

명령 행에서 더 큰 크기로 최대 힙을 설정할 수 있습니다

java -Xmx512m MyClass 
1

가 어느 메모리를 유출하고 당신은 이유를 찾을 필요하거나 자바 더 많은 힙 공간을 제공해야합니다

java -Xmx512m ... 
9
당신은 조정 -Xmx-Xms JVM 옵션을 사용하여 JVM 힙 크기를 할 수

: -Xmx 최대 힙 크기를 초기 힙 크기 -Xms. 예 :

java -Xms128m -Xmx256m BigApp 

나는 보통 초기 및 최대 힙 크기에 대해 동일한 설정을 사용합니다.

문제가 발생할 때 더 많은 정보없이 JVM의 크기를 조정하는 방법을 말하기가 정말로 어렵습니다. 아니면 어딘가에서 메모리 누수가 발생하여 힙 크기가 증가합니다. 도움이된다면 나중에 문제가 발생하게 될 것입니다. 이 경우 유일한 해결책은 누출 문제를 해결하는 것입니다.

마지막으로, 항상 의 힙이 클수록 주요 GC가 더 길어지는 것을 명심하십시오..

3

힙 덤프 크기를 늘리면 반창고 일 수 있습니다. 적절한 적절한 인수를 추가하여 힙 덤프를 생성해야합니다.

java -XX:+HeapDumpOnOutOfMemoryError -mn256m -mx512 

이렇게하면 java _ *. hprof와 유사한 파일이 생성됩니다. 그런 다음 오픈 소스 도구 모음을 사용하여 힙 덤프를 분석 할 수 있습니다. Java 1.6은 JHat과 함께 제공됩니다. JHat은 일종의 버그이며 큰 힙을 잘 분석하지 않습니다. 이 멋진 Eclipse 플러그인을 사용합니다 : Eclipse Memory Analyzer.

보고서가 힙 덤프에서 생성되면 어떤 클래스가 가장 많은 메모리를 차지하고 있는지를 알 수 있으며 코드를 디버깅하여 메모리 누수를 찾을 수 있습니다.

17

TLDR : jruby -J-Xmx1024m script_you_want_to_run.rb 다른 언급했듯이

, 프로그램이 JVM이 할당 할 수있는 최대 크기보다 더 많은 메모리를 할당하기 위해 노력하고있다.

다른 사람들도 언급했듯이 -Xmx1024m 인수와 함께 명령 줄을 통해 더 많은 메모리 할당을 허용하도록 Java를 구성 할 수 있습니다 (예 :).

-Xmx는 최대 메모리의 인수이고 1024m은 메모리 크기입니다 (메가 바이트의 경우 최종 m). 나는 JRuby가 최대 메모리가 512m로 설정된 JVM을 이미 시작했다고 생각한다. 따라서 아마 그 이상으로 올라가고 싶을 것이다.

는 JRuby를을 사용하여 명령 행에서 JVM에 인수를 보내려면, 당신은 그래서 당신의 명령 줄은 다음과 같이됩니다 인수 앞에 -J를 추가해야합니다 : 또한

jruby -J-Xmx1024m script_you_want_to_run.rb 

내가 메모리 누수 감정에 동의하십시오.이 오류가 표시 될 것이라는 기대로 많은 수의 객체를 다루지 않으면 프로그램에 의도하지 않은 부작용이있을 가능성을 조사하고 싶을 수 있습니다.

1

"Java 힙 공간"메시지는 새 오브젝트를 Java 힙에 할당 할 수 없음을 나타냅니다. 오류가 반드시 응용 프로그램 메모리 누수를 의미하지는 않습니다. 이 문제는 구성 문제와 같이 간단 할 수 있습니다. 여기서는 지정된 힙 크기 (또는 지정되지 않은 경우 기본 크기)가 응용 프로그램에 충분하지 않습니다.

가능성이 오류의 원인 및 해결 방법 : http://www.blogsoncloud.com/jsp/techSols/java-lang-OutOfMemoryError-Java-heap-space.jsp

4

확인이 명령을 사용하여 JRuby에서의 JVM 버전은

jruby -v 

는이 문자열을 반환하는 경우 그것은 당신이 때문에 당신을 32 비트 JVM을 사용하는 것을 의미한다 최대 힙 크기를 2GB 이상으로 설정할 수 없습니다.

jruby 1.7.3 (1.9.3p385) 2013-02-21 dac429b on Java HotSpot(TM) Client VM 1.6.0_37-b06 [Windows 7-x86] 

JAVA_HOME을 Java의 64 비트 버전으로 설정해야합니다. 예 : 다시

jruby 1.7.3 (1.9.3p385) 2013-02-21 dac429b on Java HotSpot(TM) 64-Bit Server VM 1.7.0_09-b05 [Windows 7-amd64] 

을 JRuby를 -v 명령을 문질러 경우

set JAVA_HOME=C:\Program Files\Java\jdk1.7.0_09 

당신은 당신이 지금 JVM의 64 비트 버전을 사용하고 있는지 볼 수 있습니다 다음과 같은 출력을 볼 수 있습니다. 그 후 당신은 설정할 수 있습니다

set JRUBY_OPTS=-J-Xmx2g 

을 다음과 또는 나를 위해 최선을 다했다 솔루션을 JRUBY_OPTS입니다 설정

jruby -J-Xmx2g <your ruby program> 
+0

'-S' 플래그도 필요합니다. 예를 들어'jruby -J-Xmx2g -S rails s puma' – Kris

9

을 다음과 같이 프로그램을 실행할 수있는 JRuby를 환경 매개 변수 옵션을 해제합니다. 그것은 Koray의 대답에서 언급되었습니다.

set JRUBY_OPTS=-J-Xmx2g 
0

비슷한 문제가 발생하여 몇 시간 동안 인터넷 검색 결과를 찾을 수 없습니다. 필요한 것은 Xms 및 Xmx 매개 변수를 설정하는 것입니다. 다음은 나를위한 것입니다.

ps aux | grep java

실제로 jruby가 실행중인 것을 찾으십시오. 그것을 죽이십시오 (kill -9 process_id). 명령 행에서 기본 Java 옵션으로 명령을 다시 실행하십시오.

희망이 있습니다.

그런데 필자는 Juraby on Rails 4.0과 함께 퓨마 서버를 사용하고 있습니다. 좀 더 세련된 솔루션을 알고 있다면 알려 주시기 바랍니다. 나는 모든 것을 시도했다. (after_use_hook, .rvmrc, .bashrc 등.)

고마워.

+0

'native java 선택권'? – Richardsondx

관련 문제