Acabei de escrever o script python que faz o trabalho:
#!/usr/bin/env python
import os, sys
primary_processes = { "unity-panel-service", "unity-applications-daemon", "unity-files-daemon", "unity-gwibber-daemon", "unity-music-daemon", "unity-shopping-daemon", "unity-lens-video", "hud-service", "zeitgeist-fts", "zeitgeist-datahub", "zeitgeist-daemon", "zeitgeist-fts" }
secondary_processes = { "lightdm", "X", "gnome-session", "gnome-settings-daemon", "gnome-keyring-daemon", "compiz", "pulseaudio", "gnome-fallback-mount-helper", "nautilus", "gconf-helper", "gconfd-2", "gtk-window-decorator", "indicator-printers-service", "indicator-sound-service", "indicator-session-service", "indicator-messages-service", "indicator-application-service", "ubuntu-geoip-provider", "gnome-screensaver", "gnome-pty-helper", "update-notifier", "deja-dup-monitor" }
debugOn=False
def getPID(curProc):
try:
return os.popen("pidof "+curProc).read().strip()
except:
return "0"
def getProcMemUsage(curProcID):
"""
Returns curProc's mem usage of curProcID in Kbytes
"""
if(curProcID=="0" or curProcID==""):
return 0
try:
if debugOn:
print curProcID+": "+os.popen("pmap -x "+curProcID+" | tail -1 | awk '{print $3, $2}'").read().strip()
return int(os.popen("pmap -x "+curProcID+" | tail -1 | awk '{print $3}'").read().strip())
except:
return 0
def getProcCpuUsage(curProcID):
"""
Returns curProc's % cpu usage
"""
if(curProcID=="0" or curProcID==""):
return 0
try:
percentage=os.popen("ps aux | grep "+curProcID+" | grep -v grep | awk '{print $3}'").read().strip()
if debugOn:
print curProcID+": "+percentage+"%"
return float(percentage)
except:
return 0
def KbToMb(curKB):
return "{0:.2f}".format(curKB/1024.0)
def main():
sumKB=0
sumCPU=0
if "-d" in sys.argv:
global debugOn
debugOn=True
if "-a" in sys.argv:
for proc in primary_processes :
procpid=getPID(proc)
sumKB += getProcMemUsage(procpid)
sumCPU += getProcCpuUsage(procpid)
for proc in secondary_processes :
procpid=getPID(proc)
sumKB += getProcMemUsage(procpid)
sumCPU += getProcCpuUsage(procpid)
else:
for proc in primary_processes :
procpid=getPID(proc)
sumKB += getProcMemUsage(procpid)
sumCPU += getProcCpuUsage(procpid)
if "-c" in sys.argv:
print str(KbToMb(sumKB))+" MB"
else:
print str(sumKB)+" KB"
print str(sumCPU)+"% CPU"
main()
Uso: Basta executá-lo para dizer o que a unidade usa (uso de memória + cpu%)
-
-c - > converte Kb para Mb
-
-d - > depuração está em
-
-a - > também faz o trabalho para processos secundários
Por exemplo,
./script.py -c -d
Os processos secundário e primário são variáveis globais no topo do script, portanto, sinta-se à vontade para editar o script e incluir os processos nos quais está interessado.
PS: Eu acho o uso de memória de um processo usando pmap -x
, que eu acho um pouco ... excessivo (diz que meu servidor X consome até 70 MB), mas eu acho que os desenvolvedores de sabe mais do que eu.