2011-07-05 3 views
1

로드가 많은 웹 애플리케이션이 있습니다. 코드의 특성에 대해서는 다루지 않을 것입니다. 왜냐하면 나는 단지 몇 가지 문제 해결 조언과 도구 추천을 원하기 때문입니다.매달려있는 Java 웹 앱 문제 해결

웹 앱이므로 각 요청에 스레드가 있습니다. 높은 부하 테스트에서 앱이 응답하지 않는 동안 모든 CPU를 소비하기 시작합니다. 요청 스레드가 테스트중인 새 코드에 매달려 있다고 의심됩니다. CPU 소비의 사실로 인해, 나는 이것이 내 애플 리케이션 측면에 있어야한다고 가정합니다. 내가 이해할 수있는 것은 전체 CPU 소비가 내 첫 번째 문제 해결 노력이 해당주기를 소비하는 코드를 조사해야한다는 것입니다.

매달려있는 스레드와 코드 줄을 검사하기위한 도구 및/또는 방법은 무엇입니까? 다시 말하지만, 나는 앱을 문제가있는 행동으로 쉽게 만들 수있다.

나는 visualvm을 찾아서 사용해 왔습니다. 완벽한 도구처럼 보입니다. 제안을 위해 아직 열리지 만. 나는 일식 TPTP를 보았고 수명이 다할뿐만 아니라 무게가 가벼워 질 것으로 보인다.

+0

로 볼 수 그냥 매달린 채 일시 중지하십시오. 각 스레드를보십시오. 왜 매달아 졌는지 알 수 있습니다. 또한'jstack'도 같은 정보를 제공해야합니다. 큰 도구가 필요하지 않습니다. –

+0

@Mike Dunlavey 감사합니다. 좋은 충고입니다. 초기에, 나는 가장 가벼운 무게 도구를 사용하고 싶다고 생각했다.'jstack'은 확실히 자격이있다. 'TPTP '에 익숙해 지려고 노력하면서, 나는 더 가벼운 도구를 추구하기 위해 그 노력을 포기했다. 그러나 'visualvm'은 전동 공구의 경량 성이 매우 중요합니다. 설치하고 켜기 만하면됩니다. 모든 Java 1.6 (업데이트 7) 이상의 응용 프로그램은이 도구에 표시됩니다. – chad

+0

'visualvm'이 품질 앱인 것처럼 들립니다. 불행히도, 문서에서 그것은 [공통적 인 문제로 고통 받고 있습니다] (http://stackoverflow.com/questions/1777556/alternatives-to-gprof/1779343#1779343). 'jstack'은 근본적인 도구이지만, 문제를 바로 잡을 것입니다. 라인별로 백분율을보고하는 다른 벽시계 스택 샘플러는 확대/축소, 가능하면 상어, 아마도 oprofile입니다. –

답변

0

스레드를 시작하고 스레드를 닫을 때 로깅 메시지를 삽입 할 수 있습니다. 그런 다음 응용 프로그램을 시작하고 코드를 관통하면서 출력을 검사합니다.

또 다른 방법은 메모리 누수를 찾는 것입니다. 확실하지 않은 경우 JVM의 가상 메모리를 확장 할 수 있습니다.

+0

'최상위'와 같은 도구를 통해 볼 때, 앱에 메모리 문제가 없습니다. 문제는 그것이 모든 CPU를 소모한다는 것입니다. – chad

+0

코드를 보지 않고서는 그것이 무엇인지 알아 내기가 어렵습니다. 그들이 가지고 또 다시 – SvenK

0

@chad은 ... 당신은 DB 측에서 무슨 일이 일어나고 있는지보고 시작하는 것이 좋습니다 당신이 전체 그림에서 데이터베이스가 있나요 ... 당신은 아주 잘 DB 잠금, 현재의 세션 등

+0

을 몇 가지 결과를 계산하지 않도록 스레드간에 메모리를 공유하는 스레드가 시작되면 시도가 가능한 객체 적은 실체화 할 수있는 방법, 슬림에 시도를보십시오 : 다음은 몇 가지 일반적인 팁 내가 틀렸다면 나를 바로 잡아라.하지만 응용 프로그램 쪽의 CPU 소비가 db 문제를 나타내지는 않습니까? 사실, 데이터 계층과 네트워크 트래픽도 모니터링 했으므로 제외되었습니다. 나는 데이터 계층이 문제가 아닌 것으로 가정되었다는 것을 내 질문에 재 편집 할 것이다. – chad

+0

@chad :이 경우 각각의 유스 케이스에 대해 jprobe 도구를 사용해보십시오.이 도구는 현명한 시간 소비를 제공합니다. – ag112