스레드 당 CPU 통계 얻기


17

특정 응용 프로그램의 각 스레드에 대해 현재 CPU 사용량 (정확히 cpu % 및 wait %)에 관심이 있습니다. 어딘가에서 그 정보를 얻을 수 있습니까?

나는 알고 top실제 스레드 (PID를 가진 사람) 당 캔 분할 정보를하지만, 그들 각각의 시스템 / 사용자 / 대기 CPU 사용량 분할을 표시하지 않습니다. 또한 그 정보를 기록하는 방법을 원합니다. 그렇게 할 수있는 앱 (또는 API)을 알고 있습니까?

답변:


4

SystemTap을 살펴볼 것 입니다. 이 도구는 확실히 당신이 원하는 것을 줄 것입니다. 스레드 프로파일 링에 대한 예제 가 있습니다 . 원하는 것을 모두 가지고 있는지는 모르지만 수정하도록 할 수 있습니다.



12

ps명령으로 얻을 수있는 스레드 당 CPU 사용량의 백분율 :

 ps -emo %cpu,pid,user,args

계산 방법은 다음과 ps manpage같습니다.

현재 사용 된 CPU 시간을 프로세스 실행 시간 (cputime / realtime ratio)으로 나눈 값을 백분율로 표시합니다.


CPU 시간과 io-wait 시간에 관심이 있습니다. ps는 불행히도 두 번째 것을 처리 할 수 ​​없습니다.
viraptor

자체 참고 사항 : -e를 -C java로 대체하고 pid를 java 앱의 스레드 ID에 대해 spid로 대체
kellogs

2
자기 자신에 ps -To pcpu,tid -C java | sort -r -k1 | more대한 더 큰 참고 : 자바 응용 프로그램의 돼지 스레드. ps --sort=pcpu아무것도 달성하지 못한다. 정렬 부분에 쉘을 사용하는 것이 좋습니다.
kellogs

매우 유용한 @kellogs, 감사합니다. 예를 들어 "10"이 "2"위에 표시되도록 추가 -n하거나 -g정렬하려고합니다.
EM0

0

아마도 htop을 보았을 때, 꽤 많이 구성 할 수 있습니다.


불행히도 특정 스레드에 대해 사용자 / 시스템 / 대기 시간에 CPU를 분할 할 수 없습니다-전체 시스템에 대해서만
viraptor

예,하지만 어떻게하면 되나요?
rmobis

0

당신은 sar을 시도 했습니까? 그것은 pid 레벨에서도 많은 정보를 가져올 수 있습니다.



0

나는 우리 가이 물건을 들여다 볼 멋진 도구가없는 임베디드 시스템에서 이것을 우연히 발견했습니다.

이를 위해 cpuacct cgroup각 스레드를 사용하고 자체 폴더에 배치했습니다. 이 방법으로 사용량을 측정 할 수있었습니다.

계층 구조는 다음과 같습니다.

my-app.service
|-tid1
|-tid2
|-tid3

그런 다음 그것을

my-app.service
|-dir1
|  -tid1
|-dir2
|  -tid2
|-dir3
|  -tid3
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.