2009-04-19 5 views
5

프로세스의 모든 스레드에 대한 CPU 사용량 메트릭을 얻어야합니다.Redhat Linux에서 스레드 CPU 사용량 메트릭을 얻는 방법

  • 운영 체제 =
  • 요구 사항 =이 아니라 시간에 하나 개의 스냅 샷, indefinetly 샘플마다 몇 초를 취할 필요가 POSIX
  • 를 사용하여 레드햇 리눅스
  • 프로그래밍 언어 = C++.
  • 제약 = 스레드

    난 당신이 "최고"명령을 사용할 수 있습니다 알고에 추가 코드를 쓸 수 있지만, 어떤 다른 방법이있다 없다? "ps"플래그가 있습니까?

감사합니다.

답변

0

당신은 리눅스에서 사용할 수 gnu gprof이 작업을 수행 할 수 있습니다. 나는 그들이 스레딩을 지원한다고 주장하지만 이것은 프로세스 레벨에서 프로파일 링하는 것보다 더 복잡하므로 찾고있는 결과를 얻지 못할 수도 있습니다.

여기에 상황에 대한 howto입니다.

5

전체 프로세스에 대한 정보를 얻기 위해 /proc/[your PID]/stat의 내용을 읽을 수 있으며 2.6 커널이있는 경우 개별 스레드에 대한 정보가있는 /proc/[your PID]/task/[thread ID]/stat도 있습니다. 이 두 필드를 찾을 수 있습니다,

특히 (here 참조)

이 프로세스가 사용자 모드에서 예정되어 있는지의 jiffies의 수.

STIME %의 루

이 프로세스가 커널 모드에서 스케줄링되었는지의 jiffies 수.

cutime %의 LD

여기서 문제가되는 부분은 값을 부여하는 장치이다. jiffy는 1/HZ 초입니다. 여기서 HZ는 커널 시계 틱 속도이며이 클럭 속도를 결정하는 것이 어려운 부분입니다. 이 단지 하나의 특정 시스템이 필요한 경우

, 당신은 단지 몇 가지 검사를 수행하거나 커널 헤더를보고 프로그램에이 값을 하드 코딩 할 수 있습니다. 좀 더 일반적인 방법으로이를 결정하는 방법을 알고 싶다면 its source code을보고 상단과 같은 도구가 어떻게 작동하는지 확인할 수 있습니다 (old_Hertz_hack() 함수 및 관련 주석 참조)

+0

특정 머신에서 Hz 값을 얻는 방법을 발견했습니다 : cat/boot/config -'uname -r' | grep HZ –

1

아마도 더 간단한 방법 일 수 있습니다. 이렇게하려면 getrusageRUSAGE_THREAD의 Linux 특정 확장자를 사용하십시오. 이 시간을 갖게되면 마지막으로 샘플링 한 시간을 빼고 마지막 샘플 이후 경과 한 실시간으로 나눕니다. 즉, CPU 사용량을 백분율로 표시합니다.

리눅스 특정 문서의 경우, rusage liunx man page를 참조하십시오.

0

"top"명령을 사용하여 먼저 프로세스 ID를 찾을 수 있습니다.

그 후, 당신은 프로세스 만 표시 CPU/메모리 사용에 그 후

top -p {pid} 

를 다음 명령을 사용할 수 있습니다, 당신은 스레드를 보여주기 위해 "시프트"+ "H"를 눌러하실 수 있습니다