использование процессора на процесс? - PullRequest
3 голосов
/ 15 января 2012

Как я могу получить процент использования процессора для каждого процесса? Так, например, я хотел бы запустить мою программу prog и получить информацию об использовании процессора, например:

  prog name cpu0 cpu1 cpu2 cpu3  total
  prog        15   20   45   47   127%

Есть ли какой-нибудь инструмент для этого? Спасибо.

Ответы [ 4 ]

1 голос
/ 15 января 2013

Я думаю, что вы можете использовать информацию в /proc/[pid]/stat и /proc/stat, чтобы оценить это.

Ознакомьтесь с замечательными ответами на Как рассчитать загрузку ЦП процесса с помощьюPID в Linux из C? , который объясняет, как рассчитать% использования ЦП для одного процессора.

Шестой из последнего числа, полученного вами из /proc/[pid]/stat, - это «процессор% d, номер ЦП, последний выполненный"(по крайней мере, в Ubuntu 12.04).

Чтобы охватить несколько процессоров, вы можете оценить загрузку процессора за определенный период и (очень приблизительно!) оценить долю времени на каждом процессоре.Затем используйте эти пропорции, чтобы разделить загрузку ЦП между процессорами.На основании информации в /proc/stat вы также можете выбрать общее время для каждого процессора, а затем у вас есть все необходимые переменные!

См. http://linux.die.net/man/5/proc для получения дополнительной информации о proc.

1 голос
/ 25 января 2012

Для firefox:

while [ 1 ]; do ps --no-heading -C firefox -L -o command,psr,pcpu|sort -k 2 -n; echo; sleep 1; done

Вам нужно сложить третий столбец (что я не вижу нелепо простого способа сделать это), потому что на самом деле он показывает вам все потоки.Первый столбец - это имя, второй процессор, третий,% процессора.

0 голосов
/ 09 июня 2015

Вот простой питон, который я сделал:

import re,time,sys
cpuNum=0
if len(sys.argv)==1:
    print "use pidcpu <pid1,pid2,..,pidn>"
    sys.exit(0)

pids=sys.argv.pop()

def getCpuTot():
    global cpuNum
    f=open("/proc/stat","r")
    ln=f.read()
    f.close()
    #cpu  858286704 148088 54216880 117129864 2806189 5046 16997674 0 0 0
    r=re.findall("cpu[\d\s]{1}\s+(\d+)\s(\d+)\s(\d+)\s(\d+)\s.*?",ln,re.DOTALL)
    cpuNum=len(r)-1
    return int(r[0][0])+int(r[0][1])+int(r[0][2])+int(r[0][3])

def getPidCPU(pid):
    f=open("/proc/"+ str(pid) +"/stat","r")
    ln=f.readline()
    f.close()
    a=ln.split(" ")
    return int(a[13])+int(a[14])

cpu1=getCpuTot()
cpupid1=[]
for pid in pids.split(","):
    cpupid1.append(getPidCPU(pid))
time.sleep(1)
cpu2=getCpuTot()    
cpupid2=[]
for pid in pids.split(","):
    cpupid2.append(getPidCPU(pid))


i=0
for pid in pids.split(","):
    perc=int(cpuNum*(cpupid2[i]-cpupid1[i])*100/float(cpu2-cpu1))
    i+=1
    print pid,perc
0 голосов
/ 30 апреля 2014

linux process explorer project предоставляет эту функциональность, вы можете увидеть график для CPU / Memory / IO для каждого процесса в диалоге свойств.

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...