2011-05-08 2 views
6

JProfiler와 YourKit 모두로 코드를 프로파일했습니다. 그러나, 어떤 코드 조각이 높은 CPU 부하를 일으키는 지 파악하는 방법을 찾지 못했습니다.Java 프로파일 링 : 어떤 코드가 높은 CPU로드를 유발하는지 탐지합니다.

응답 시간이 나쁜 경우 핫 스폿을 감지하는 것은 간단합니다. 내 경우에는 응답 시간은 문제가되지 않습니다. 이 특정 요청이 처리되는 짧은 시간 동안 CPU로드가 실제로 매우 높습니다 (놀랍게도 높음).

어떤 클래스 (들)/메소드가이를 일으키는 지 어떻게 확인할 수 있습니까? 나는 내가 찾고있는 것이 얼마나 많은 CPU 사이클이 필요한 방법의 처리인지를 알려주는 어떤 종류의 목록이라고 생각한다.

+1

방법 핫스팟은 내가 볼 수있는 곳입니다. 이 결과를 믿지 않는 이유가 있습니까? 요청이 수행 될 때 CPU가 100 % (또는 전체 코어 하나 이상)가 될 것이라고 기대하지 않습니까? –

+0

네, 물론 당신 말이 맞아요. CPU 사이클 수를 측정하고 실행 시간을 측정하는 것은 [실행 시간 = (사이클 수 * 사이클 당 시간 + I/O 대기 등)]과 직접적으로 관련됩니다. –

답변

5

CPU로드는 근본적으로 가상 엄지 손가락을 꼬집는 대신 CPU가 수행 할 수있는 CPU 사이클의 수를 나타냅니다.

요청이 실제로 디스크 I/O를 기다리는 대신 실제 작업을 수행하면 CPU가 처리해야 할 작업이 진행되는 동안 부하가 높아질 것으로 예상됩니다.

응답 시간이 등반을 시작할 때 찾아야 할 것은 CPU주기가 부족합니다.

요구 사항이 너무 짧아서 프로파일 러가 사용자에게 필요한 것을 보여 줄 수 없다는 것이 문제라면 자동화 된 도구를 사용하여 수십만 건의 요청을 처리하도록 요청하는 것이 좋습니다. 도움이 될 것입니다.

+1

"대신 가상 엄지 손가락을 빙빙 떠는 것입니다. :) +1 – Eugene

1

처리하는 동안 100 %입니다. 기다리는 동안 (예 : I/O의 경우) 0 %입니다. 중간에는 없습니다. 프로세스가 100 % 미만일 때, 이는 마지막 N 밀리 초 동안 롤링 평균입니다.

더 효율적으로 만들 수있는 방법이 있다면 시간이 덜 걸리며 그만큼 (필연적으로) 줄어들 것입니다.

시간을 절약하는 방법을 찾으려면 충분한 작업량과 try this을 지정하십시오.