Eu uso iotop
(ferramenta de linha de comando).
sudo apt-get install iotop
Existe uma maneira de visualizar as estatísticas de IO com base no processo no Ubuntu. Eu tenho um servidor Ubuntu 10,10 que de vez em quando vai moer no disco rígido por 30 segundos, eu estou tentando descobrir o que está causando isso. Desde já, obrigado. Tudo o que estou executando nele é o mysql, no entanto, isso acontece mesmo quando o mysql não está sob nenhuma carga (sem conexões apenas inativas).
Eu uso iotop
(ferramenta de linha de comando).
sudo apt-get install iotop
A iotop está fazendo o trabalho a maior parte do tempo. No entanto, achei o seguinte script python mais útil:
(mostra apenas os processos atualmente ativos)
#!/usr/bin/python
from glob import *
from time import *
from os.path import *
import sys, os
memory = {}
sleep_time = 5;
unit = 1024.0;
unit_name = "KiB"
for argument in sys.argv:
if argument.find( "=" ) >= 0:
field, value = argument.split( "=" );
if field == "s":
sleep_time = int( value );
if argument == "KB": #fake Kilobyte
unit = 1000.0;
unit_name = "KB"
if argument == "KiB": #real Kilobyte
unit = float(2**10)
unit_name = "KiB"
if argument == "MB": #fake Megabyte
unit = 1e6;
unit_name = "MB"
if argument == "MiB": #real Megabyte
unit = float(2**20)
unit_name = "MiB"
if argument == "GB": #fake Gigabyte
unit = 1e9;
unit_name = "GB"
if argument == "GiB": #real Gigabyte
unit = float(2**30)
unit_name = "GiB"
while True:
os.system( "clear" );
table = [];
for item in memory.items():
item[1]["to_delete"] = 1;
process_list = glob( "/proc/*/status" );
for process in process_list:
name = ""
pid = ""
rb = 0
wb = 0
try:
f = open( process, "r" );
for line in f:
field, value = line.split( ":" );
if field == "Name":
name = value.strip();
if field == "Pid":
pid = value.strip();
break;
f.close();
io_file = dirname( process ) + "/io"
f = open( io_file, "r" )
for line in f:
field, value = line.split( ":" );
if field == "read_bytes":
rb = int(value);
if field == "write_bytes":
wb = int(value);
break;
f.close();
except:
pass
item = memory.get( pid, { "PID":pid, "NAME":name, "READ":rb, "WRITE":wb } );
item["to_delete"] = 0;
if ( rb - item["READ"] > 0 or wb - item["WRITE"] > 0 ):
table += [[ pid, name, rb - item["READ"], wb - item["WRITE"] ]]
item["READ"] = rb;
item["WRITE"] = wb;
memory[pid] = item;
for item in memory.items():
if item[1]["to_delete"]:
memory.pop( item[0] )
print "PID".rjust(7) + " " + "PROCESS".ljust(30)+"READ".rjust(20) + "WRITE".rjust(20)
for row in table:
print row[0].rjust(7) + " " + str(row[1]).ljust(30) + ("%5.2f"%(row[2]/(sleep_time*unit)) + unit_name+"/s").rjust(20) \
+ ("%5.2f"%( row[3]/(sleep_time*unit) ) + unit_name+"/s").rjust(20)
print "\n* ", unit_name, "=", int(unit), "Bytes"
sleep( sleep_time );