2016-10-24 3 views
0

다음은 샘플링 모드에서 응용 프로그램을 검사 할 때 JProfiler의 "CPU보기"의 "핫 스폿"의 스크린 샷입니다. 스택의 상단 (CPU 사용량의 76 %)은 "java.lang.Thread.run"이 차지합니다.핫스팟보기의 "java.lang.Thread.run"에서 높은 자체 시간은 무엇을 의미합니까?

제 질문은 어떤 스레드입니까? 두 번째 위치와 그 아래에서 다른 핫스팟을 표시하는 스레드입니까 (녹색 상자에 표시되어 있습니까)? 아니면 쓰레기 수거와 같은 모든 뒷 작업을 수행하고있는 스레드입니까? (해당 메서드는 핫 스폿 목록에 표시되지 않습니다)? (보스를 포함한 자바와 달리,)

enter image description here

+0

왜 부정 투표가 발생합니까? 분명히 해줄 수 있니? –

+1

'java.lang.Thread.run'은 일반적으로 'Thread.start'에서'작업 할 작업 '이라고하는 메소드입니다. 프로파일 러는 메소드를 함께 그룹화합니다. 메소드와 스레드는 서로 다른 개념이며 메소드가 '스레딩'과 관련되어 있지만 '스레드'자체가 문제입니다 (스레드는 다른 많은 메소드에서도 코드를 실행합니다!). 즉, 나는 그 결과물에 대한 좋은 설명이 없으며 다른 높은 시간의 자기 방식을 기대할 것입니다.} – user2864740

+1

@ArnabBiswas 단편 스레드를 많이 시작 했습니까? 그런 다음 대부분의 시간은 스레드를 시작하고 실제 작업을 수행하는 데 사용되지 않습니다. –

답변

1

대부분의 웹 서버는 "하나 개의 스레드의 요청에 따라"모델에 따라, 즉 각각의 HTTP 요청은 완전히 정확하게 하나 개의 스레드에 의해 처리됩니다. 이 스레드는 대개 DB 요청과 같은 것을 기다리는 데 대부분의 시간을 소비합니다. 웹 컨테이너는 필요에 따라 새 스레드를 만듭니다.

이러한 스레드는 가비지 수집 작업을 수행하지 않습니다. JVM은 항상 GC를 전용 스레드, 즉 "GC 스레드"에서 실행합니다. GC 스레드가 활성화 될 때마다 사용 가능한 프로세서 및 따라서 CPU 시간에 대한 실제 "응용 프로그램 스레드"와 경쟁합니다.

질문에 대답하려면 예, 여기에 사용자 요청에 해당하는 모든 작업이 고려됩니다. 즉, CPU가 사용자 요청을 처리하는 데 소요되는 시간의 76 %를 소비합니다.

중첩 된 메서드 호출 시간은 모두 이미지에 표시된 첫 번째 핫 스폿에 캡처됩니다.

+0

녹색 상자 (스택 아래쪽)에 나타나는 메소드도 사용자가 언급 한 사용자 스레드에 의해 실행됩니다. 그래서, "java.lang.Thread.run"의 자체 시간에 해당 메소드의 자체 시간이 포함되는지 여부는 확실하지 않습니다. –

+1

아니요, 포함되지 않습니다. 함수에 중첩 된 호출이 있으면 '+'아이콘을 확장하여 각각의 자체 시간을 볼 수 있습니다. – arnabkaycee

관련 문제