복붙노트

[SPRING] Tomcat-Spring-Hibernate 웹 애플리케이션에서 'PermGen 공간 부족'예외로 수행 할 수있는 작업은 무엇입니까?

SPRING

Tomcat-Spring-Hibernate 웹 애플리케이션에서 'PermGen 공간 부족'예외로 수행 할 수있는 작업은 무엇입니까?

Spring Hibernate를 사용하여 등록 된 사용자 데이터를 Oracle 데이터베이스에 유지하는 웹 애플리케이션이 있습니다. 응용 프로그램은 개발 환경에서 정상적으로 작동하지만 훨씬 많은 데이터가있는 실제 환경에서 복사하면 실패했습니다. 처음에는 응용 프로그램이 정상적으로 시작되지만 몇 가지 작업 후에 'PermGen out of space'예외가 발생했습니다.

Google, Spring 및 Hibernate 포럼에서 검색을 시작했지만 도움이되지 않습니다. 이 오류에 대해 많은 논의가 있지만 각 솔루션에 대해 '작동합니다'라고 말하고 '그렇지 않습니다.'라고 말하는 사람들이 있습니다.

예를 들어, 많은 사람들이 -XX : MaxPermSize JVM 매개 변수를 늘리려고 제안하고, 다른 사람들은 JVM 매개 변수가 작동하지 않는다고 말합니다. javassist 라이브러리 및 다른 라이브러리 및 cglib 라이브러리 사용시 문제가 사용되어야한다고하는 게시물이 있습니다. 다른 사람들은 문제가 cglib에 있다고 말합니다.

우리는 java1.5_0_09, Spring 2.5와 javaassist3.4.GA, Tomcat 5.5를 웹 컨테이너로 사용하고 Oracle 10g를 데이터베이스로 사용합니다.

아무도 나에게이 문제의 원인과 해결 방법을 설명 할 수 있습니까?

해결법

  1. ==============================

    1.-XX : MaxPermSize가 작동하지만 방금 올바른 값을 얻어야합니다. 기본값은 클라이언트 모드 VM의 경우 32MB이고 서버 모드 VM의 경우 64MB입니다. 메모리가 있으면 256MB로 설정하는 것이 좋습니다.

    -XX : MaxPermSize가 작동하지만 방금 올바른 값을 얻어야합니다. 기본값은 클라이언트 모드 VM의 경우 32MB이고 서버 모드 VM의 경우 64MB입니다. 메모리가 있으면 256MB로 설정하는 것이 좋습니다.

    java -XX:MaxPermSize=256m
    

    문제는 Spring과 Hibernate가 런타임 생성 클래스를 많이 사용할 수 있기 때문에 발생한다. 생성 된 클래스는 모두 PermGen 메모리 풀에 저장되므로 이러한 프레임 워크를 사용하는 경우 PermGen을 대량으로 사용해야합니다.

  2. ==============================

    2.Tomcat의 일부 버전은 전쟁 재배치시 메모리 누수가 있음을 알아야합니다. 그것은 tomcat 6.0.x에서 나에게 일어났다.

    Tomcat의 일부 버전은 전쟁 재배치시 메모리 누수가 있음을 알아야합니다. 그것은 tomcat 6.0.x에서 나에게 일어났다.

    제안 된대로 MaxPermSize를 늘리십시오. 이것은 개발 시스템을위한 임시 솔루션입니다. 2-3 일 후에 오류가 발생하면 서버를 다시 시작하십시오. 생산 과정에서 그렇게 간단하지 않습니다. 따라서 이것은 개발을 위해 작동하지만, 메모리 누수 문제를 해결해야하는 프로덕션에서는이 접근법이 작동하지 않습니다.

    유출을 발견하려면 jdk 1.6 및 1.5와 함께 제공되는 jconsole 응용 프로그램을 사용하십시오. 프로세스에 바인딩하고 시간이 지남에 따라 사용 된 메모리를 볼 수 있습니다.

    또한 다음 내용을 읽을 수 있습니다.

  3. ==============================

    3.하이버 네이트 (Spring없이 사용)로이 문제를 보았다. 문제는 애플리케이션 수명 기간 동안 단일 인스턴스를 생성하지 않고 각 사용자 요청에 대해 SessionFactory의 인스턴스를 생성한다는 것입니다.

    하이버 네이트 (Spring없이 사용)로이 문제를 보았다. 문제는 애플리케이션 수명 기간 동안 단일 인스턴스를 생성하지 않고 각 사용자 요청에 대해 SessionFactory의 인스턴스를 생성한다는 것입니다.

    YourKit 프로파일 러를 사용하여이를 조사하고 문제점을 발견했습니다.

  4. ==============================

    4.스카프 만 (Skaffman)은 -XX : MaxPermSize 속성이 작동한다고 말합니다. 그러나 때로는 제한을 올리는 것이 지연 될 수 있다는 근본적인 문제가있을 수 있습니다.

    스카프 만 (Skaffman)은 -XX : MaxPermSize 속성이 작동한다고 말합니다. 그러나 때로는 제한을 올리는 것이 지연 될 수 있다는 근본적인 문제가있을 수 있습니다.

    이 메모를 본 적이 있니? 그것은 비슷한 문제를 한 번 해결하는 데 도움이되었습니다. 링크를 요약하려면 다음을 수행하십시오.

  5. ==============================

    5.JDK 6에 포함 된 Visual GC는 실시간으로 매우 훌륭한 그래픽 표현을 제공합니다. eden, generational 및 perm 공간에 어떤 일이 일어나는지 확인할 수 있습니다. 당신은 왜 그 이유가 보이지 않을 것입니다.

    JDK 6에 포함 된 Visual GC는 실시간으로 매우 훌륭한 그래픽 표현을 제공합니다. eden, generational 및 perm 공간에 어떤 일이 일어나는지 확인할 수 있습니다. 당신은 왜 그 이유가 보이지 않을 것입니다.

    업데이트 : JDK 1.6.0_13 배포판의 bin / jvisualvm.exe입니다. 모니터 할 프로세스의 PID를 지정하십시오.

  6. ==============================

    6.여기서 모든 응답은 웹 응용 프로그램을 여러 번 다시 시작하기 때문에 발생하는 PermGen 문제와 관련이 있습니다.이 경우 문제는 이미 Tomcat을 다시 시작한 후 첫 번째 배포에서 발생하므로 ClassLoader의 참조 또는 커먼 로그의 문제가 될 수 없습니다.

    여기서 모든 응답은 웹 응용 프로그램을 여러 번 다시 시작하기 때문에 발생하는 PermGen 문제와 관련이 있습니다.이 경우 문제는 이미 Tomcat을 다시 시작한 후 첫 번째 배포에서 발생하므로 ClassLoader의 참조 또는 커먼 로그의 문제가 될 수 없습니다.

  7. ==============================

    7.jdk6에서 실행중인 경우 jconsole 응용 프로그램을 사용하여 응용 프로그램의 메모리 사용을 모니터하고 더 자세히 조사 할 수 있습니다.

    jdk6에서 실행중인 경우 jconsole 응용 프로그램을 사용하여 응용 프로그램의 메모리 사용을 모니터하고 더 자세히 조사 할 수 있습니다.

    추구 할 또 다른 방법은 프로파일 러를 사용하는 것입니다. JProfiler를 사용하여 응용 프로그램을 살펴 봅니다. 문제가 어디서 왔는지 정확하게 알려줍니다.

  8. ==============================

    8.나는 같은 문제에서 뛰었고, 나는이 상황에서 Tomcat이 범인이라는 것을 읽었다.

    나는 같은 문제에서 뛰었고, 나는이 상황에서 Tomcat이 범인이라는 것을 읽었다.

    그런 다음 나는 대신 부두로 바꿨고 모든 것이 훌륭해졌고 앱은 예상대로 배포 / 실행됩니다. 그래서 바람둥이가 꼭 필요한 것이 아니라면 제티를 제안 할 것입니다.

  9. from https://stackoverflow.com/questions/1124131/what-can-be-done-with-permgen-out-of-space-exception-in-tomcat-spring-hibernat by cc-by-sa and MIT license