환경
Adobe Experience Manager
문제
를 사용하여 AEM Java 스레드 덤프를 분석합니다. IBM 스레드 분석기 도구 및 우수 사례를 참조하십시오.
다음 단계 및 우수 사례를 사용하여 AEM Java 스레드 덤프를 분석합니다. IBM 스레드 분석기 도구:
다운로드 및 설치 IBM 스레드 분석기 (짧게 IBM TDA라고 하겠습니다)
성능 문제가 발생한 AEM 인스턴스에서 스레드 덤프를 캡처합니다.
IBM TDA에서 스레드 덤프를 엽니다.
스레드 덤프 세부 정보를 보려면 목록에서 파일을 선택한 다음 스레드 세부 정보 버튼을 클릭합니다.
정렬 기준 스택 깊이 가장 긴 스택 위에.
10줄 이상의 스택 깊이로 스레드를 검토합니다. 이는 일반적으로 가장 흥미 있는 스레드입니다.
관심 있는 스레드를 기록합니다.
스레드별 정렬 주/도.
아래로 스크롤하여 실행 가능 스레드. 실행 가능한 스레드는 스레드 덤프 수행 시 적극적으로 CPU 타임이 필요한 스레드입니다.
참고: 를 검토할 때 실행 가능 스레드, 무시할 수 있는 스레드 섹션에 있는 마지막 항목이 될 필요가 없습니다.
응용 프로그램의 일부인 실행 가능한 스레드(예: 백그라운드 작업 스레드 또는 요청 스레드)를 찾습니다(요청 스레드에는 다음과 같은 이름이 있음). 127.0.0.1 1347028187737 GET /content/sites/global/en/sitemap.static-delivery.httpd.html HTTP/1.1).
스레드가 검색되면 하나씩 클릭합니다.
각 요청 스레드에 대해서는 스레드 이름의 타임스탬프를 확인하면서 사용자 브라우저가 서버에 요청한 시간을 파악할 있습니다.
예를 들어 위의 스레드 이름에서 타임스탬프(밀리초 unix epoch 형식)는 1347028187737.
다음 도구를 사용하여 그 epoch 번호를 날짜/시간으로 변환할 수 있습니다 www.epochconverter.com.
각 스레드 덤프에 수행한 날짜와 시간이 표시됩니다.
요청 시간과 스레드 덤프 시간 차이를 비교하여 요청이 활성화된 기간을 확인할 수 있습니다.
요청 스레드를 검토한 후 다른 스레드를 스크롤합니다 실행 가능 스레드.
실행 가능한 관심 스레드를 찾은 다음 가운데 패널을 보십시오. 대기 중인 스레드.
나열된 스레드는 선택한 스레드가 모니터를 릴리스할 때까지 대기합니다.
대기 중인 스레드가 표시되지 않으면 선택한 스레드가 계속 잠금 기능을 소유할 수 있습니다(자세한 내용은 잠금 기능 클래스 구현 참조).
예를 들어, ReentrantReadWriteLock 잠금이 여러 개의 모니터를 내부적으로 구현할 때 잠금 홀더가 어떤 스레드인지 알 수 없습니다.
따라서 소스 코드를 확인하여 잠금 홀더일 수 있는 스레드로 소스 코드를 연결할 수도 있습니다.
스레드에 대기 중인 다른 많은 스레드가 있는 잠금 또는 모니터가 있는 경우 나머지 스레드 덤프를 통해 동일한 문제가 있는 다른 스레드를 찾을 수 있는지 확인하십시오.
다른 덤프에 동일한 스레드가 여전히 있는지 확인합니다(IBM TDA에서는 여러 스레드 덤프를 선택하고 스레드 비교 여러 스레드 덤프에서 스레드 상태를 보는 단추
자세한 내용은 Collector 서비스 아래 스크린샷에서
이 보기에서 여러 스레드 덤프의 스레드를 보면서 장기 실행 스레드인지 확인할 수 있습니다.
기본적으로 스레드가 실행 가능 여러 덤프 간에 상태가 있고 스택이 긴 경우 일반적으로 실행 중인 스레드가 긴 것입니다.
만약 당신이 실행 가능 스레드 목록을 찾은 다음 스레드 목록으로 돌아가서 스레드 덤프를 선택한 다음 모니터 세부 사항 위쪽 패널의 단추.
IBM TDA는 모니터 보유 스레드와 대기 스레드의 트리 보기를 표시하는 창을 엽니다.
참고: 서블릿 엔진 스레드 풀 모니터와 같이 일부 스레드 풀 스레드가 표시될 수 있으며 유휴 스레드는 무시할 수 있습니다.
대부분의 경우 스택 줄이 10개 이하이므로 스레드를 유휴 스레드 풀 스레드라고 언급할 수 있습니다.
스레드 수준 CPU 사용률(Linux 플랫폼만 해당):
만약 top -H -b -n1 -p javapid
출력 외에 스레드 덤프 외에 스레드 수준 CPU 사용률을 상호 참조할 수 있습니다.
상단 출력을 열고 CPU를 활용하는 스레드의 프로세스 ID를 가져옵니다.
프로세스 ID를 16진수로 변환한 다음 해당 스레드 덤프 파일에서 해당 16진수 값을 검색합니다.
ID는 와 일치해야 합니다. nid 스레드 중 하나
CPU를 가장 많이 사용하는 일치하는 스레드가 VM 스레드 또는 GC 스레드 문제가 발생할 수 있습니다.
더 많은 스레드 덤프 및 상위 출력에 대해 동일한 연습을 반복하고 이러한 스레드에 CPU 시간이 걸리는 패턴이 있으면 메모리 문제가 발생합니다.
메모리 문제가 확인되면 다음에 문제가 발생하는 경우 힙 덤프를 캡처합니다.
다음 보기 메모리 문제 분석 문서 heap 덤프 캡처 및 분석에 대한 자세한 내용을 참조하십시오.
무시할 수 있는 스레드:
- 1347028691218 in code at java.net.PlainSocketImpl.socketAccept(Native Method)
: 새 연결을 기다리는 서블릿 엔진의 스레드 풀의 스레드입니다.