Cómo verificar el volumen de lectura y escritura del proceso IO
Las versiones del kernel de Linux superiores a 2.6.20 admiten estadísticas de IO del proceso. Puede usar herramientas como iotop para monitorear las operaciones de IO de cada proceso, al igual que puede usar top en. en tiempo real. Lo mismo ocurre con la visualización de la memoria del proceso, la CPU y otra información. Pero para las versiones del kernel de Linux inferiores a 2.6.20, no tienes tanta suerte. Siguiendo el método indicado en el repositorio de Stack Overflow, escribí un script Python simple para imprimir el proceso IO en el kernel de Linux <2.6.20.
Kernel < 2.6.20
La idea de este script es simple: redirigir los resultados de dmesg a un archivo y analizarlos, luego imprimir las estadísticas de lectura/escritura de IO del proceso. cada segundo Información, debe ejecutar el script como root:
#! /usr/bin/python
# Monitoreo de la actividad de E/S del disco por proceso
# escrito por
import sys, os, time, signal, re
clase DiskIO:
def __init__(self, pname=Ninguno, pid=Ninguno, lecturas=0, escrituras=0):
self.pname = pname
self.pid = pid
self.reads = 0
self.writes = 0
def principal ():
argc = len(sys.argv)
if argc = 1:
imprime "uso: ./iotop"
sys.exit(0)
Si os.getuid() ! = 0:
print "debe ejecutarse como root"
sys.exit(0)
signal.signal(signal.SIGINT, signal_handler) p>
os.system('echo 1 > / proc/sys/vm/block_dump')
imprime "TASK PID LEER ESCRITURA"
mientras es Verdadero:
os.system('dmesg -c > /tmp/diskio.log')
l = []
f = open('/tmp/diskio.log ', 'r')
línea = f.readline()
mientras que línea:
m = re.match(\
'^(\S+)\((\d+)\): (LEER|ESCRIBIR) bloque (\d+) en (\S+)', línea)
si m = Ninguno: p>
si no l:
l.append(DiskIO(m.group(1), m.group(2)))
línea = f.readline( )
continuar
encontrado = False
para el elemento en l:
if item.pid == m.group(2) :
encontrado = Verdadero
if m.group(3) == "LEER":
item.reads = item.reads + 1
elif m. group(3) == "WRITE":
item.writes = item.writes + 1
si no se encuentra:
l.append(DiskIO(m.group(1), m.group(2)))
línea = f.readline()
tim
e.sleep(1)
para el elemento en l:
print "%-10s %10s %10d %10d" %\
(item.pname , item.pid, item.reads, item.writes)
def signal_handler(señal, marco):
os.system('echo 0 > /proc/sys/vm/ block_dump')
sys.exit(0)
if __ name__=="__main__":
main()
Kernel >= 2.6.20
Si desea utilizar iotop para ver la actividad de E/S del proceso en tiempo real, debe descargar y actualizar el nuevo kernel (2.6.20 o superior). Para compilar un nuevo kernel, las opciones TASK_DELAY_ACCT y TASK_IO_ACCOUNTING deben estar activadas. Descomprime el kernel y entra a la interfaz de configuración:
# tar jxvf linux-2.6.30.5.tar.bz2
# mv linux-2.6.30.5 /usr/src/
# cd /usr/src/linux-2.6.30.5
# make menuconfig
Seleccione Hackeo del kernel -> Recopilar información de depuración del programador y Recopilar estadísticas del programador, guardar el kernel y luego compilar el kernel:
# make module; make module_install make module; make module_install
Modifica grub para asegurar que el nuevo kernel arranque correctamente:
# vi /boot/grub/menu.lst
Basado en el nuevo kernel, iotop requiere Python 2.5 o superior para ejecutarse, por lo que si actualmente está ejecutando Python 2.4, debe descargarlo y Instale los últimos paquetes de Python. Aquí se explica cómo compilar e instalar desde el código fuente:
# tar jxvf Python-2.6.2.tar.bz2
# cd Python-2.6.2
# ./configure
# make; make install
No olvides descargar setuptools:
# mv setuptools-0.6c9-py2.6.egg. sh setuptools -0.6c9-py2.6.egg
# sh setuptools-0.6c9-py2.6.egg