2017-03-15 8 views
2

최근에 액세스하는 페이지가 매우 느리게로드되는 동안 error.log 파일 캐시, 메모리 누수 관련 오류가 발생하여 질문에 착수했습니다. AEM 인스턴스가 처리 할 수있는 JCR 세션 수.?AEM 인스턴스가 얼마나 많은 JCR 세션을 처리 할 수 ​​있습니까?

+0

. 예 : 누출의 원인은 무엇입니까? –

+0

@FlorianSalihovic 우리는 모든 사용자가 연결되어 개발 된 코드 기반을 실행/테스트하려고하는 DEV 상자가 있습니다. (대부분의 코드 스 니펫에는 데이터 종류 사용 사례를 설정하고 검색하는 JCR 세션이 있습니다.) 페이지를 테스트하는 데로드가 거의 걸리지 않습니다. 그렇다면 JCR 세션 수와 AEM 서버가 처리 할 수있는 최대 제한 수를 알아낼 수있는 방법이 있습니다. – VAr

+0

로그에 "CacheManager : resizeAll"과 같은 항목이 있습니까? 그렇다면 다음 명령을 시도하십시오. jmap -histo | grep 세션 목록을 제공해야하는 SessionImpl. 내 생각에 두 가지 주요 요소 인 세션의 폐쇄 비율과 개방 비율이 다릅니다. 세션을 닫지 않는 잘못된 코드입니다. 장시간 실행중인 작업이 너무 많으면 잘 작성된 코드로 인해 JCR 세션이 증가 할 수 있으며 (예 : 느린 Mongo 배포시) 시스템이 멈추는 속도가 느려집니다. –

답변

1
  1. ResourceResolver 인터페이스를 사용하고 Session을 사용하지 마십시오.
  2. ResourceResolver이 서비스, 서블릿 또는 모델 (슬링 모델, WCMUse)에 제공되거나 적응을 통해 하나의 인스턴스를 만드는 경우이를 닫지 마십시오.
  3. ResourceResolverFactory을 통해 ResourceResolver를 수동으로 생성해야하는 경우 수명이 다한 후 종료해야합니다.
  4. Session에도 동일하게 적용됩니다.

예 : 그것은 아무 대답 할 수 있다는 것을, 많은 요인에 따라 달라집니다

package io.salihovic.florian.examples; 

import javax.annotation.CheckForNull; 

interface ResourceResolverTemplate { 

    @CheckForNull ResourceResolver getResourceResolver(); 

    default void usage() { 
    final ResourceResolver resolver = this.getResourceResolver(); 
    if (resolver != null) { 
     // do something 
     resolver.close(); 
    } 
    } 
}