Java 7의 성능 저하
Java 7에서 AEM의 성능이 갑자기 저하되고, 스레드 덤프에 원인 스레드가 표시되지 않습니다. 많은 스레드가 RUNNABLE 상태에 있으며, 결함이 없는 것으로 알려진 코드 부분을 실행합니다.
이 문제의 근본적인 원인은 Java 7에 이 스택 오버플로우 질문 및 답변에서 설명한 CodeCache 문제가 있기 때문입니다.
즉, "Java 7에서 CodeCache가 꽉 차면 JIT가 중지되고, CodeCache 영역의 거의 1/3이 초기화되지만 JIT가 다시 활성화되지 않습니다."
따라서 코드 캐시에서 제거되었거나 JVM에서 실행된 적이 없는 Java 코드의 실행 속도가 훨씬 느려집니다. 그러므로 JIT 컴파일 코드만 누르는 몇 가지 요청이 일반 응답 시간으로 반응하지만, 다른 요청은 시간이 훨씬 오래 걸립니다.
해결 방법: Java 버전을 업그레이드하거나 코드 캐시의 플러시를 비활성화합니다.
가능한 세 가지 해결 방법이 있습니다.
- 이 성능 문제의 영향을 받지 않는 Java 8으로 업그레이드합니다. 가장 안전한 해결 방법입니다.
- Java 1.7.0_101-b14로 업그레이드합니다. Java 7은 2015년 5월 이후 EOL되므로 이 해결 방법은 Oracle의 Java SE 지원이 필요합니다.
- 코드 캐시의 플러시를 비활성화하고, 다음 JVM 인수를 AEM 시작 스크립트에 추가하여 캐시 크기를 늘립니다.
- -XX:-UseCodeCacheFlushing
- -XX:ReservedCodeCacheSize=90M
이러한 인수는 코드 캐시 크기 90MB(기본값 48MB 대신)를 지정하고 코드 캐시 플러시를 비활성화하므로 코드 캐시가 오버플로우되는 경우 기존 핫 코드가 해석기 모드로 실행되지 않습니다(새 코드만 더 이상 컴파일되지 않음). 일정 기간 동안 코드 캐시 크기를 모니터링하여(예: jconsole 사용) 구성된 최대값이 너무 작지 않은지 확인합니다. Java 8으로 업그레이드한 후에 다음 설정을 제거해야 합니다.
내 계정 로그인