이유: 일반적인 이유는 다음과 같습니다.
1. 데이터베이스에서 한 번에 너무 많은 데이터를 가져오는 등 메모리에 로드되는 데이터의 양이 너무 많습니다. >2. 사용 후 객체에 대한 참조가 지워지지 않아 JVM이 재활용이 불가능합니다.
3. 코드에 무한 루프가 있거나 루프가 너무 많은 중복 객체 엔터티를 생성합니다. ;
4. 타사 소프트웨어에서 사용된 BUG
5. 시작 매개변수 메모리 값이 너무 작게 설정되었습니다.
일반적인 오류 메시지: 1. tomcat java.lang.OutOfMemoryError: PermGen 공간
2.tomcat:java.lang.OutOfMemoryError: Java 힙 공간
3.weblogic:ServletException의 근본 원인 java.lang.OutOfMemoryError
4.resin:java.lang.OutOfMemoryError
5.java:java.lang.OutOfMemoryError
해결책; 응용 프로그램 서버 프롬프트 오류: 시작 매개변수 메모리 값을 충분히 크게 설정하십시오.
2. Java 코드로 인한 오류 해결: 다음 사항에 중점을 둡니다.
1) 코드에 무한 루프나 재귀 호출이 있는지 확인합니다.
2) 새로운 객체 엔터티를 반복적으로 생성하는 대규모 루프가 있는지 확인합니다.
3) 데이터베이스 쿼리에서 모든 데이터를 가져오는 쿼리가 있는지 확인합니다. 일반적으로, 한 번에 십만 개의 레코드를 메모리로 가져오면 메모리 오버플로가 발생할 수 있습니다. 이 문제는 상대적으로 숨겨져 있습니다. 온라인으로 전환하기 전에는 데이터베이스에 데이터가 적고 문제가 발생할 가능성이 적었지만 온라인으로 전환한 후에는 데이터베이스에 데이터가 많아 단일 쿼리로 인해 메모리 오버플로가 발생할 수 있습니다. 따라서 데이터베이스 쿼리에 페이징을 사용해 보십시오.
4) 사용 후 List, MAP 등 컬렉션 객체가 지워지지 않는지 확인하세요. List 및 MAP과 같은 컬렉션 개체에는 항상 개체에 대한 참조가 있으므로 이러한 개체는 GC에서 재활용될 수 없습니다.
사례: 1. 최대 절전 모드에서 데이터를 쿼리할 때 한 번에 너무 많은 데이터를 쿼리하는 경우 나중에 이 부분의 코드를 조정하고 매번 지정된 양의 데이터만 검색하여 문제를 성공적으로 해결했습니다. 2. 스트레스 테스트를 할 때 OutOfMemoryError가 발생하고 세션 자원이 해제되지 않은 것으로 확인됩니다. 세션의 Invalidate() 메소드를 통해 세션 자원을 해제하는 것이 가장 좋습니다. 3. 프로그램에 무한 루프가 나타납니다. 4. Tomcat을 배포하고 실행할 때 OutOfMemoryError가 발생합니다. 이 문제를 해결하려면 메모리 매개 변수 값을 늘리십시오.
tomcat의 java.lang.OutOfMemoryError: Java 힙 공간 예외 처리
1 , 힙 크기 JVM 힙 설정은 Java 프로그램이 실행될 때 JVM이 할당하고 사용할 수 있는 메모리 공간을 설정하는 것을 의미합니다. JVM은 초기 공간을 시작할 때 힙 크기 값을 자동으로 설정합니다. (즉, -Xms)는 물리적 메모리의 1/64이고, 최대 공간(-Xmx)은 물리적 메모리의 1/4입니다. -Xmn -Xms -Xmx 및 JVM에서 제공하는 기타 옵션을 사용하여 설정할 수 있습니다. Heap 크기의 크기는 Young Generation과 Tenured Generation의 합입니다. 팁: JVM에서는 98%의 시간이 GC에 사용되고 사용 가능한 힙 크기가 2% 미만인 경우 이 예외 메시지가 발생합니다. 팁: 최대 힙 크기는 사용 가능한 물리적 메모리의 80%를 초과할 수 없습니다. 일반적으로 -Xms 및 -Xmx 옵션은 동일한 값으로 설정되어야 하며 -Xmn은 -Xmx 값의 1/4이어야 합니다.
2. 해결 방법: 힙 크기를 수동으로 설정하고, TOMCAT_HOME/bin/catalina.sh를 수정하고 "echo "Using CATALINA_BASE: $CATALINA_BASE""에 다음 줄을 추가합니다: JAVA_OPTS="-server -Xms800m -Xmx800m -XX :MaxNewSize=256m"
java.lang.OutOfMemoryError in tomcat: PermGen 공간 예외 처리
1. PermGen 공간 전체 이름 PermGen 공간 중 영구 생성 공간은 메모리의 영구 저장 영역을 의미합니다. 이 메모리는 주로 JVM에서 클래스 및 메타 정보를 저장하는 데 사용되며 클래스는 Loader에 의해 로드될 때 PermGen 공간에 배치됩니다. 클래스 인스턴스(Instance)를 저장하는 힙과 다른 영역인 GC(Garbage Collection)는 기본 프로그램 실행 중에 PermGen 공간을 정리하지 않으므로 애플리케이션에 CLASS가 많으면 PermGen 공간 오류가 발생할 가능성이 높습니다. 이 오류는 웹 서버가 사전 컴파일 시 JSP 처리를 수행할 때 흔히 발생합니다. WEB APP에서 다수의 타사 jar를 사용하고 해당 크기가 jvm(4M)의 기본 크기를 초과하는 경우 이 오류 메시지가 생성됩니다.
해결책: MaxPermSize 크기를 수동으로 설정하고 TOMCAT_HOME/bin/catalina.sh를 수정합니다. "echo "Using CATALINA_BASE: $CATALINA_BASE"": JAVA_OPTS="-server -XX:PermSize=64M -XX :MaxPermSize=128m 권장 사항: 동일한 타사 jar 파일을 tomcat/shared/lib 디렉터리로 이동하면 jar 파일의 반복적인 메모리 사용량을 줄일 수 있습니다.
weblogic에서 java.lang.OutOfMemoryError의 예외 처리
오류 프롬프트: "ervletException java.lang.OutOfMemoryError의 근본 원인"
해결책: bea/weblogic/common에서 CommEnv 조정 중간 매개변수: sun if "%PRODUCTION_MODE%" == "true" goto sun_prod_mode set JAVA_VM=-client set MEM_ARGS=-Xms256m -Xmx512m -XX:MaxPermSize=256m set JAVA_OPTIONS=%JAVA_OPTIONS% -Xverify:none goto 계속 : sun_prod_mode 설정 JAVA_VM=-server set MEM_ARGS=-Xms256m -Xmx512m -XX:MaxPermSize=256m 계속 진행
java.lang.OutOfMemoryError: Eclipse가 Jboss를 실행할 때 PermGen 공간 예외 처리
Eclipse에서 Jboss를 실행할 때 시간이 너무 길면 java.lang.OutOfMemoryError: PermGen space error가 발생할 수 있습니다. 해결 방법은 다음과 같습니다.
1) 디버그 아이콘 옆을 클릭합니다. 작은 화살표
2) "디버그 구성..." 메뉴 항목을 클릭합니다.
3) 왼쪽의 "일반 서버" 트리에서 "JBoss v4.2 at localhost"를 선택합니다. ;
4) 오른쪽의 "인수" 탭을 클릭하고 "VM 인수"를 추가합니다.
-Dprogram.name=run.bat -Djava.endorsed.dirs="D: /JBoss405 /bin/../lib/endorsed" -Xms128m -Xmx512m -XX:PermSize=64m -XX:MaxPermSize=256m
5) 명령줄 모드에 있는 경우 또는 "run.bat"를 클릭합니다. JBoss를 직접 실행하려면 bin/run.conf 파일에서 JVM 옵션을 수정해야 합니다. JAVA_OPTS="-Xms128m -Xmx512m..." 섹션을 찾은 다음 "-XX:PermSize=64m -XX:"를 추가합니다. 마지막에 MaxPermSize=256m"입니다. 저장하면 괜찮습니다.
6) 참고: 128, 512, 64 및 256과 같은 숫자는 컴퓨터 구성에 따라 조정될 수 있으며 "적용"을 클릭합니다.
Resin 하에서 java.lang.OutOfMemoryError의 예외 처리
원인: 이 오류는 일반적으로 JVM 물리적 메모리가 너무 작기 때문에 발생합니다. JVM(Java Virtual Machine)의 기본 최대 메모리는 64MB에 불과하여 개발 및 디버깅 중에는 문제가 되지 않을 수 있지만, 애플리케이션이 매우 작고 액세스 권한이 거의 없는 한 실제 애플리케이션 환경의 요구 사항을 충족시키기는 어렵습니다. 그렇지 않으면 프로그램이 일정 기간 동안 실행된 후 java.lang.OutOfMemoryError 오류가 발생하는 것을 발견할 수 있습니다. 따라서 레진에 사용할 수 있는 가상 머신 메모리의 크기를 늘려야 합니다.
해결책: /usr/local/resin/bin/httpd.sh에서 args 옵션을 수정하여 -Xms(초기 메모리) 및 -Xmx(사용 가능한 최대 메모리 크기) 매개변수를 추가합니다. 이는 제한하는 데 사용할 수 있습니다. JVM 메모리 사용의 물리학. 예: args="-Xms128m -Xmx256m" 설정 후 JVM의 초기 물리적 메모리는 128m이고, 사용 가능한 최대 물리적 메모리는 256m입니다. 이 두 값은 서버의 실제 상황에 따라 시스템 관리자가 설정해야 합니다.
재인쇄: http://www.cnblogs.com/cyjch/archive/2012/04/10/2440421.html