우리는 거대한 개발중인 대규모 Java 기반 응용 프로그램을 실행합니다. 3 개월에서 6 개월마다 PERM 메모리의 크기를 늘려야하거나 응용 프로그램이 시작될 때 또는 잠시 후에 온라인 상태가 될 때 메모리가 부족할 위험이 있습니다. 응용 프로그램은 JBoss 4.2 및 tomcat 서버에서 호스팅됩니다. Java에서의 PERM은 얼마입니까 (1.5GB가 높음)
우리의 현재 설정
은 다음과 같습니다-server -Xms12G -Xmx12G -XX :를 MaxPermSize = 1536M -XX : + UseConcMarkSweepGC -XX : + CMSIncrementalMode가
내가 도움이되지만 궁금 수이 끔찍한 보인다 경우 높은.
시작시 PERM 메모리가 매우 빠르게 채워진 것 같습니다. jstat를 사용하여 90 %에서 99 % 사이의 아무 곳이나.
웹 응용 프로그램은 30 개 이상의 개별 war 파일로 구성됩니다. JBoss에서 이들은 300MB + ear 파일 하나로 배포됩니다.
대규모 응용 프로그램의 경우 이처럼 많은 PERM이 발생합니까?
아마도 앱을 해킹 할 시간이 되었습니까? 이 300MB EAR 파일에는 무엇이 있습니까? 그래픽과 다른 내용이 있어야합니다. 어쩌면 정적 인 내용을 웹 서버가 제공하도록 옮기고 AppServer가 로직을 수행하게 할 수 있습니다. –
이것은 정말로, 정말로, 정말로, 정말로 높게 보인다. 추천할만한 것이 없지만 코드베이스는 얼마나 큽니까? 다른 클래스 로더에서 여러 개의 라이브러리 사본을로드 할 수 있습니까? 문제가보고되었다는 것을 제외하고는 현재 JBoss Classloader에 익숙하지 않습니다. 다른 컨테이너에서도 비슷한 결과를 얻었습니까? –
코드베이스가 상당히 큽니다 (ERP 시스템). EAR 파일 (공용 라이브러리)에서 "공유"된 100 개 이상의 외부 jar 라이브러리 (일부는 선반에서 꺼내 진 일부 고객)가 있지만 각 독서에서 각자의 복사본을 얻는 것처럼 보일 것입니다. 그게 사실이야? – jrhickey