각 프로세스 스레드마다 CPU %를 얻어야합니다.스레드 당 CPU 사용량
그래서, 나는 간단한 스크립트를 만들 :
여기import psutil
from psutil import Process
p = psutil.Process(4499)
treads_list = p.get_threads()
for i in treads_list:
o = i[0]
th = psutil.Process(o)
cpu_perc = th.get_cpu_percent(interval=1)
print('PID %s use %% CPU = %s' % (o, cpu_perc))
는 TOP이 과정에 대한 같은 모습입니다 :
4942 teamcity 20 0 3288m 831m 3124 R 33.3 10.6 10303:37 java
32700 teamcity 20 0 3288m 831m 3124 S 5.9 10.6 18:49.99 java
5824 teamcity 20 0 3288m 831m 3124 S 5.9 10.6 1:57.90 java
4621 teamcity 20 0 3288m 831m 3124 S 3.0 10.6 1834:09 java
4622 teamcity 20 0 3288m 831m 3124 S 2.6 10.6 1844:15 java
스레드는 2.6-5.9 %의 CPU를 사용하고, 부모 PID는 - 33.3을 사용합니다.
그러나 - 여기에 스크립트의 결과는 다음과 같습니다
# ./psutil_threads.py
PID 10231 use % CPU = 60.9
PID 10681 use % CPU = 75.3
PID 11371 use % CPU = 69.9
PID 11860 use % CPU = 85.9
PID 12977 use % CPU = 56.0
PID 14114 use % CPU = 88.8
내가 여기
를 누락 무엇 ... 각 스레드 '먹고'56-88%의 CPU 같은데?
컴퓨터에 몇 개의 코어가 있습니까? – dano
또한, 스크립트의 결과에 나타나는 pid가'top'의 pid와 일치하지 않습니다. 다른 실행에서 로그를 보여 주시겠습니까? – dano
멀티 코어 머신을 사용하고 있습니까? 툴은 멀티 코어 아키텍처를위한 CPU %를 제시하는 다양한 접근 방식을 가지고 있습니다. 일부는 100 %가 전체로드시 전체 시스템이고 100 %가 100 %가 전체 코어 일 뿐이라는 것을 고려하면 100 %를 초과하는 프로세스 또는 스레드가있을 수 있습니다 ([this example] (http : //s24.postimg 참조)). .org/c4he1p9et/image.png)). – jdehesa