2009-08-20 3 views
4

웹 응용 프로그램을 개발하고 jBoss 4.0.2를 사용하고 Eclipse를 여러 번 재배포 할 때 jBoss 메모리가 부족하여 충돌이 발생합니다. 그리고 프로덕션 환경에 새 버전을 설치해야 할 때 프로덕션 서버 메모리를 사용하게되므로 jBoss가 고객 서버의 메모리를 다시 배치하지 못하도록해야합니다. 이 문제에 대한 해결 방법이 있습니까?jBoss 4.0.2 동일한 WAR를 여러 번 배포하면 PermGem/Out-of-Memory 오류로 인해 jBoss가 충돌합니다.

답변

5

기본적으로 아니요. JBoss 클래스 로더가 작동하는 방식 때문에 각 배포는 응용 프로그램이 배포 취소 된 경우에도 배포되지 않을 PermGen 덩어리를 사용합니다.

PermGen 메모리 풀 크기를 수백 메가 (또는 심지어 작전)까지 늘리면 증상을 완화 할 수 있으므로 문제가 더 쉽게 생깁니다. 나는 또한 코드에서 정적 필드의 사용을 줄이면 (특히 대형 객체를 참조하는 정적 필드) PermGen에 대한 영향이 줄어든다는 것을 발견했습니다.

이상적으로는 프로덕션 환경에서 핫 전개를 사용하지 않고 서버를 종료하고 WAR/EAR을 대체 한 다음 다시 시작하십시오.

0

연결되어 있는지 확실하지 않지만 의심 스럽습니다. JBoss는 응용 프로그램 분리를 구현하는 한 J2EE와 호환되지 않습니다.

모든 클래스가 들어있는 클래스 로더가 있으므로 클래스를 언로드 할 수 없으므로이 문제가 발생합니다. 이 점에서 J2EE와 호환되도록 jboss를 구성 할 수 있습니다.

"메모리가 부족합니다."또는 메모리가 부족합니까?

또한 JProfiler를 연결하고 메모리 사용을 확인하여 작업을 진행했습니다.

나는 항상 Jboss를 다시 시작했다. 시간이 너무 많이 걸리지 않았다.

-XX : + UseConcMarkSweepGC -XX : + CMSPermGenSweepingEnabled -XX : + CMSClassUnloadingEnabled -XX :를 MaxPermSize = 128m

CMS 수 실제로 GC를

0

(Sun의 Java에 적용되는)이 시도 영구 생성 힙 (클래스가있는 힙) MaxPermSize 설정은 필요하지 않지만 응용 프로그램 서버의 기본값은 낮습니다.

관련 문제