2011-01-14 2 views
6

나는 톰캣 서버 (리눅스)에서 실행되는 자바 웹 애플리케이션을 가지고있다. 프로덕션 환경에서 성능 문제가 있습니다. 랜덤 간격으로 바람막이가 실행되는 jsvc 프로세스는 90-100 % CPU에서 실행되기 시작합니다. 이 이벤트의 트리거를 찾을 수 없습니다. 서버는 쿼드 코어 시스템입니다. 메모리 소비는 이상을 나타내지 않습니다.자바 스레드 실행을 모니터하는 도구

응용 프로그램에서 어떤 스레드 (응용 프로그램 스택 추적)가 문제를 일으키는 지 어떻게 모니터합니까?

jconsolePSI Probe으로 확인 중이지만 둘 다 CPU 사용 이상을 유발하는 응용 프로그램 내의 스레드에 대한 자세한 정보를 제공하지 않습니다. 이 할

+0

입니까? – skaffman

+0

@skaffman, 죄송합니다 java-performance, 나는 그것을 고쳐 줬다. –

+0

프로덕션 서버에 성능 문제가있었습니다. 프로파일 러를 프로덕션 서버에 연결하는 것은 까다로운 작업입니다. 우리는 NewRelic을 사용해 보았습니다. 실적 조사를 추가하는 놀라운 도구입니다. – eSniff

답변

5

하나 상대적으로 쉬운 방법 (또는 경우에 작동하지 않을 수있는이 - 행동이 발생 시간에 따라 다름) :

앱이 경우 디버깅 할 동작을 (전시

, 90-100% CPU 사용은) 프로세스 ID에 jstack을 사용

http://download.oracle.com/javase/6/docs/technotes/tools/share/jstack.html

실행하고 어떤 방법으로이 발생하는 것을 스레드 검사 할 수 있습니다. 몇 번 그렇게한다면, 범인 콜 체인을 발견하는 것이 상대적으로 쉽습니다. 그러면 해당 체인의 입구를 디버깅 할 수 있습니다.

반드시 최고 또는 가장 우아한 방법은 아니지만 매우 쉽게 할 수 있으며 필요한 모든 것일 수 있습니다. 나는 거기에서 시작할 것이다. "printf는 필자가 지금까지 사용해 본 최고의 디버거"철학과 비슷합니다.

+3

JProfiler와 같은 프로파일 러가 스레드가 수행하는 작업에 대한 메트릭을 더 많이 제공하지만 문제를 상대적으로 간단하게 처리하면 시간이 많이 걸릴 수도 있습니다. 그래서 나는 적절한 프로파일 러 (profiler)를 시작하기 전에 몇 가지 예제에 대한 빠른 스택 기반 분석을 순서대로 수행해야한다고 강조합니다. – kvista

+0

Vista 답변에 감사드립니다. 나는 jstack을 시도 할 것이다. –

2

모든 Java 응용 프로그램의 모든 스레드에 대해 QUIT 신호를 보내 스택 트레이스 덤프를 가져올 수 있습니다.

kill -QUIT [processId] 

이것은 '표준 출력'프로세스에 표시됩니다.

1

그냥 내 2 센트지만 메모리 문제를 실험하지 않으면 CPU 최고점이 GC 활동이 될 수 있는지 궁금합니다. 따라서 jconsole을 사용하여 바람둥이를 모니터링하는 동안 메모리 탭을 살펴보고 힙 사용량이 높지 않은지 확인하십시오.

4

VisualVM 무엇을 찾고 계십니까? 최신 JDK와 함께 제공되며 thread usage을 모니터 할 수 있습니다.

2

상단 CPU를 소비하는 스레드를 보여주는 또 다른 도구는`[자바 스크립트 성능] '태그로 무엇 jvmtop