memtop
Nombre: memtop
Autor: Point_to_null (Carlos Marcelo Cabrera)
Origen: Propio
Lenguaje: python
Dependencias: ninguna
Licencia: GPL
Propósito: Muestra información de los procesos que más memoria ocupan
Código:
#!/usr/bin/env python
#-*- coding: UTF-8 -*-
import commands
import operator
import shutil
import curses
import time
import sys
PAUSE = 15
def get_pids():
return [int(i) for i in shutil.os.listdir("/proc") if i.isdigit()]
def get_mem(pid):
try:
file = open("/proc/%d/statm" % pid)
memory = file.read().split()[0]
file.close()
return int(memory)
except:
return 0
def get_name(pid):
try:
file = open("/proc/%d/stat" % pid)
name = file.read().split("(")[1].split(")")[0]
file.close()
return name
except:
return None
def main():
if len(sys.argv) > 1:
repeat = int(sys.argv[1])
else:
repeat = -1
step = 0
window = curses.initscr()
while step != repeat:
pids = [(get_mem(pid), pid, get_name(pid)) for pid in get_pids()]
# Groups
pidsdict = {}
for pid in pids:
if pid[2] in pidsdict:
pidsdict[pid[2]][0] += pid[0]
pidsdict[pid[2]][1] = "group"
else:
pidsdict[pid[2]] = list((pid[0], pid[1]))
pids = [(pid[1][0], pid[1][1], pid[0]) for pid in pidsdict.iteritems()]
pids.sort(key=operator.itemgetter(0), reverse=True)
pos = 0
window.clear()
for pid in pids[:window.getmaxyx()[0]]:
window.addstr(pos, 1, "%8.2f MB %5s %s" % (pid[0]/1024., pid[1], pid[2]), )
pos += 1
window.refresh()
step += 1
time.sleep(PAUSE)
if __name__ == "__main__":
exit(main())
Ejemplos de uso:
memtop [numero]
Acepta un único parámetro opcional que especifica la cantidad de veces que se mostrará la pantalla. Si es igual a 1 se mostrará una sola vez y finalizara el programa sin esperar el tiempo de refresco. Si no se especifica memtop mostrará la pantalla hasta ser finalizado.
Changelog:
- Versión 2
- Agregada la agrupación por nombres. Es la única al momento y por defecto.
- Movido a curses para asegurar portabilidad
- Versión 1
- Versión inicial. Escrita en awk. Depende de ps y el algoritmo de calculo de memoria ocupada no es realmente confiable.
-
Es una reescritura completa del programa en python.