Отображение статистики ввода-вывода для процесса

Есть ли способ просмотра статистики IO на основе процесса в Ubuntu. У меня есть сервер ubuntu 10.10, который каждый раз и в течение 30 секунд будет измельчать hdd, я пытаюсь выяснить, что вызывает это. Заранее спасибо. Все, что я запускаю, это mysql, но это происходит даже тогда, когда mysql не находится под какой-либо нагрузкой (без соединений просто не работает).

2
задан 17 February 2011 в 18:14

20 ответов

Я использую iotop (инструмент командной строки).

sudo apt-get install iotop
3
ответ дан 25 May 2018 в 22:56

Я использую iotop (инструмент командной строки).

sudo apt-get install iotop
3
ответ дан 25 July 2018 в 22:28

Я использую iotop (инструмент командной строки).

sudo apt-get install iotop
3
ответ дан 26 July 2018 в 21:47

Я использую iotop (инструмент командной строки).

sudo apt-get install iotop
3
ответ дан 2 August 2018 в 03:54

Я использую iotop (инструмент командной строки).

sudo apt-get install iotop
3
ответ дан 2 August 2018 в 03:54

Я использую iotop (инструмент командной строки).

  sudo apt-get install iotop  
3
ответ дан 4 August 2018 в 19:58

Я использую iotop (инструмент командной строки).

  sudo apt-get install iotop  
3
ответ дан 6 August 2018 в 04:00

Я использую iotop (инструмент командной строки).

  sudo apt-get install iotop  
3
ответ дан 7 August 2018 в 21:58

Я использую iotop (инструмент командной строки).

  sudo apt-get install iotop  
3
ответ дан 10 August 2018 в 10:13

Я использую iotop (инструмент командной строки).

  sudo apt-get install iotop  
3
ответ дан 13 August 2018 в 16:35

iotop делает большую часть работы. Однако я нашел следующий скрипт python более полезным:

(он показывает только активные процессы)

#!/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 );
1
ответ дан 25 May 2018 в 22:56

iotop делает большую часть работы. Однако я нашел следующий скрипт python более полезным:

(он показывает только активные процессы)

#!/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 );
1
ответ дан 25 July 2018 в 22:28

iotop делает большую часть работы. Однако я нашел следующий скрипт python более полезным:

(он показывает только активные процессы)

#!/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 );
1
ответ дан 26 July 2018 в 21:47

iotop делает большую часть работы. Однако я нашел следующий скрипт python более полезным:

(он показывает только активные процессы)

#!/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 );
1
ответ дан 2 August 2018 в 03:54

iotop делает большую часть работы. Однако я нашел следующий скрипт python более полезным:

(он показывает только активные процессы)

#!/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 );
1
ответ дан 2 August 2018 в 03:54

iotop делает большую часть работы. Однако я нашел следующий скрипт python более полезным:

(он показывает только активные процессы)

  #! / Usr / bin / python из импорта glob  * from time import * from os.path import * import sys, os memory = {} sleep_time = 5;  единица = 1024,0;  unit_name = "KiB" для аргумента в sys.argv: if argument.find ("=") & gt; = 0: field, value = argument.split ("=");  if field == "s": sleep_time = int (значение);  if argument == "KB": #fake Kilobyte unit = 1000.0;  unit_name = "KB", если аргумент == "KiB": #real Kilobyte unit = float (2 ** 10) unit_name = "KiB", если аргумент == "MB": #fake Megabyte unit = 1e6;  unit_name = "MB", если аргумент == "MiB": #real Megabyte unit = float (2 ** 20) unit_name = "MiB", если аргумент == "GB": #fake Gigabyte unit = 1e9;  unit_name = "GB", если аргумент == "GiB": #real Gigabyte unit = float (2 ** 30) unit_name = "GiB" while True: os.system ("clear");  table = [];  для элемента в памяти.items (): item [1] ["to_delete"] = 1;  process_list = glob ("/ proc / * / status");  для процесса в process_list: name = "" pid = "" rb = 0 wb = 0 try: f = open (process, "r");  для строки в поле f: field, value = line.split (":");  if field == "Name": name = value.strip ();  if field == "Pid": pid = value.strip ();  ломать;  f.close ();  io_file = dirname (process) + "/ io" f = open (io_file, "r") для строки в поле f: field = value.config (":");  if field == "read_bytes": rb = int (значение);  if field == "write_bytes": wb = int (value);  ломать;  f.close ();  кроме: pass item = memory.get (pid, {"PID": pid, "NAME": name, "READ": rb, "WRITE": wb});  item ["to_delete"] = 0;  if (rb - item ["READ"] & gt; 0 или wb - item ["WRITE"] & gt; 0): table + = [[pid, name, rb - item ["READ"], wb - item [  WRITE "]]] item [" READ "] = rb;  item ["WRITE"] = wb;  memory [pid] = item;  для элемента в памяти.items (): если элемент [1] ["to_delete"]: memory.pop (item [0]) напечатать "PID" .rjust (7) + "" + "PROCESS" .ljust (30)  + "READ" .rjust (20) + "WRITE" .rjust (20) для строки в таблице: print row [0] .rjust (7) + "" + str (строка [1]). Ljust (30) +  ("% 5.2f"% (строка [2] / (sleep_time * unit)) + unit_name + "/ s"). Rjust (20) \ + ("% 5.2f"% (строка [3] / (sleep_time * unit  )) + unit_name + "/ s"). rjust (20) print "\n *", unit_name, "=", int (unit), "Bytes" sleep (sleep_time);   
1
ответ дан 4 August 2018 в 19:58

iotop делает большую часть работы. Однако я нашел следующий скрипт python более полезным:

(он показывает только активные процессы)

  #! / Usr / bin / python из импорта glob  * from time import * from os.path import * import sys, os memory = {} sleep_time = 5;  единица = 1024,0;  unit_name = "KiB" для аргумента в sys.argv: if argument.find ("=") & gt; = 0: field, value = argument.split ("=");  if field == "s": sleep_time = int (значение);  if argument == "KB": #fake Kilobyte unit = 1000.0;  unit_name = "KB", если аргумент == "KiB": #real Kilobyte unit = float (2 ** 10) unit_name = "KiB", если аргумент == "MB": #fake Megabyte unit = 1e6;  unit_name = "MB", если аргумент == "MiB": #real Megabyte unit = float (2 ** 20) unit_name = "MiB", если аргумент == "GB": #fake Gigabyte unit = 1e9;  unit_name = "GB", если аргумент == "GiB": #real Gigabyte unit = float (2 ** 30) unit_name = "GiB" while True: os.system ("clear");  table = [];  для элемента в памяти.items (): item [1] ["to_delete"] = 1;  process_list = glob ("/ proc / * / status");  для процесса в process_list: name = "" pid = "" rb = 0 wb = 0 try: f = open (process, "r");  для строки в поле f: field, value = line.split (":");  if field == "Name": name = value.strip ();  if field == "Pid": pid = value.strip ();  ломать;  f.close ();  io_file = dirname (process) + "/ io" f = open (io_file, "r") для строки в поле f: field = value.config (":");  if field == "read_bytes": rb = int (значение);  if field == "write_bytes": wb = int (value);  ломать;  f.close ();  кроме: pass item = memory.get (pid, {"PID": pid, "NAME": name, "READ": rb, "WRITE": wb});  item ["to_delete"] = 0;  if (rb - item ["READ"] & gt; 0 или wb - item ["WRITE"] & gt; 0): table + = [[pid, name, rb - item ["READ"], wb - item [  WRITE "]]] item [" READ "] = rb;  item ["WRITE"] = wb;  memory [pid] = item;  для элемента в памяти.items (): если элемент [1] ["to_delete"]: memory.pop (item [0]) напечатать "PID" .rjust (7) + "" + "PROCESS" .ljust (30)  + "READ" .rjust (20) + "WRITE" .rjust (20) для строки в таблице: print row [0] .rjust (7) + "" + str (строка [1]). Ljust (30) +  ("% 5.2f"% (строка [2] / (sleep_time * unit)) + unit_name + "/ s"). Rjust (20) \ + ("% 5.2f"% (строка [3] / (sleep_time * unit  )) + unit_name + "/ s"). rjust (20) print "\n *", unit_name, "=", int (unit), "Bytes" sleep (sleep_time);   
1
ответ дан 6 August 2018 в 04:00

iotop делает большую часть работы. Однако я нашел следующий скрипт python более полезным:

(он показывает только активные процессы)

  #! / Usr / bin / python из импорта glob  * from time import * from os.path import * import sys, os memory = {} sleep_time = 5;  единица = 1024,0;  unit_name = "KiB" для аргумента в sys.argv: if argument.find ("=") & gt; = 0: field, value = argument.split ("=");  if field == "s": sleep_time = int (значение);  if argument == "KB": #fake Kilobyte unit = 1000.0;  unit_name = "KB", если аргумент == "KiB": #real Kilobyte unit = float (2 ** 10) unit_name = "KiB", если аргумент == "MB": #fake Megabyte unit = 1e6;  unit_name = "MB", если аргумент == "MiB": #real Megabyte unit = float (2 ** 20) unit_name = "MiB", если аргумент == "GB": #fake Gigabyte unit = 1e9;  unit_name = "GB", если аргумент == "GiB": #real Gigabyte unit = float (2 ** 30) unit_name = "GiB" while True: os.system ("clear");  table = [];  для элемента в памяти.items (): item [1] ["to_delete"] = 1;  process_list = glob ("/ proc / * / status");  для процесса в process_list: name = "" pid = "" rb = 0 wb = 0 try: f = open (process, "r");  для строки в поле f: field, value = line.split (":");  if field == "Name": name = value.strip ();  if field == "Pid": pid = value.strip ();  ломать;  f.close ();  io_file = dirname (process) + "/ io" f = open (io_file, "r") для строки в поле f: field = value.config (":");  if field == "read_bytes": rb = int (значение);  if field == "write_bytes": wb = int (value);  ломать;  f.close ();  кроме: pass item = memory.get (pid, {"PID": pid, "NAME": name, "READ": rb, "WRITE": wb});  item ["to_delete"] = 0;  if (rb - item ["READ"] & gt; 0 или wb - item ["WRITE"] & gt; 0): table + = [[pid, name, rb - item ["READ"], wb - item [  WRITE "]]] item [" READ "] = rb;  item ["WRITE"] = wb;  memory [pid] = item;  для элемента в памяти.items (): если элемент [1] ["to_delete"]: memory.pop (item [0]) напечатать "PID" .rjust (7) + "" + "PROCESS" .ljust (30)  + "READ" .rjust (20) + "WRITE" .rjust (20) для строки в таблице: print row [0] .rjust (7) + "" + str (строка [1]). Ljust (30) +  ("% 5.2f"% (строка [2] / (sleep_time * unit)) + unit_name + "/ s"). Rjust (20) \ + ("% 5.2f"% (строка [3] / (sleep_time * unit  )) + unit_name + "/ s"). rjust (20) print "\n *", unit_name, "=", int (unit), "Bytes" sleep (sleep_time);   
1
ответ дан 7 August 2018 в 21:58

iotop делает большую часть работы. Однако я нашел следующий скрипт python более полезным:

(он показывает только активные процессы)

  #! / Usr / bin / python из импорта glob  * from time import * from os.path import * import sys, os memory = {} sleep_time = 5;  единица = 1024,0;  unit_name = "KiB" для аргумента в sys.argv: if argument.find ("=") & gt; = 0: field, value = argument.split ("=");  if field == "s": sleep_time = int (значение);  if argument == "KB": #fake Kilobyte unit = 1000.0;  unit_name = "KB", если аргумент == "KiB": #real Kilobyte unit = float (2 ** 10) unit_name = "KiB", если аргумент == "MB": #fake Megabyte unit = 1e6;  unit_name = "MB", если аргумент == "MiB": #real Megabyte unit = float (2 ** 20) unit_name = "MiB", если аргумент == "GB": #fake Gigabyte unit = 1e9;  unit_name = "GB", если аргумент == "GiB": #real Gigabyte unit = float (2 ** 30) unit_name = "GiB" while True: os.system ("clear");  table = [];  для элемента в памяти.items (): item [1] ["to_delete"] = 1;  process_list = glob ("/ proc / * / status");  для процесса в process_list: name = "" pid = "" rb = 0 wb = 0 try: f = open (process, "r");  для строки в поле f: field, value = line.split (":");  if field == "Name": name = value.strip ();  if field == "Pid": pid = value.strip ();  ломать;  f.close ();  io_file = dirname (process) + "/ io" f = open (io_file, "r") для строки в поле f: field = value.config (":");  if field == "read_bytes": rb = int (значение);  if field == "write_bytes": wb = int (value);  ломать;  f.close ();  кроме: pass item = memory.get (pid, {"PID": pid, "NAME": name, "READ": rb, "WRITE": wb});  item ["to_delete"] = 0;  if (rb - item ["READ"] & gt; 0 или wb - item ["WRITE"] & gt; 0): table + = [[pid, name, rb - item ["READ"], wb - item [  WRITE "]]] item [" READ "] = rb;  item ["WRITE"] = wb;  memory [pid] = item;  для элемента в памяти.items (): если элемент [1] ["to_delete"]: memory.pop (item [0]) напечатать "PID" .rjust (7) + "" + "PROCESS" .ljust (30)  + "READ" .rjust (20) + "WRITE" .rjust (20) для строки в таблице: print row [0] .rjust (7) + "" + str (строка [1]). Ljust (30) +  ("% 5.2f"% (строка [2] / (sleep_time * unit)) + unit_name + "/ s"). Rjust (20) \ + ("% 5.2f"% (строка [3] / (sleep_time * unit  )) + unit_name + "/ s"). rjust (20) print "\n *", unit_name, "=", int (unit), "Bytes" sleep (sleep_time);   
1
ответ дан 10 August 2018 в 10:13

iotop делает большую часть работы. Однако я нашел следующий скрипт python более полезным:

(он показывает только активные процессы)

  #! / Usr / bin / python из импорта glob  * from time import * from os.path import * import sys, os memory = {} sleep_time = 5;  единица = 1024,0;  unit_name = "KiB" для аргумента в sys.argv: if argument.find ("=") & gt; = 0: field, value = argument.split ("=");  if field == "s": sleep_time = int (значение);  if argument == "KB": #fake Kilobyte unit = 1000.0;  unit_name = "KB", если аргумент == "KiB": #real Kilobyte unit = float (2 ** 10) unit_name = "KiB", если аргумент == "MB": #fake Megabyte unit = 1e6;  unit_name = "MB", если аргумент == "MiB": #real Megabyte unit = float (2 ** 20) unit_name = "MiB", если аргумент == "GB": #fake Gigabyte unit = 1e9;  unit_name = "GB", если аргумент == "GiB": #real Gigabyte unit = float (2 ** 30) unit_name = "GiB" while True: os.system ("clear");  table = [];  для элемента в памяти.items (): item [1] ["to_delete"] = 1;  process_list = glob ("/ proc / * / status");  для процесса в process_list: name = "" pid = "" rb = 0 wb = 0 try: f = open (process, "r");  для строки в поле f: field, value = line.split (":");  if field == "Name": name = value.strip ();  if field == "Pid": pid = value.strip ();  ломать;  f.close ();  io_file = dirname (process) + "/ io" f = open (io_file, "r") для строки в поле f: field = value.config (":");  if field == "read_bytes": rb = int (значение);  if field == "write_bytes": wb = int (value);  ломать;  f.close ();  кроме: pass item = memory.get (pid, {"PID": pid, "NAME": name, "READ": rb, "WRITE": wb});  item ["to_delete"] = 0;  if (rb - item ["READ"] & gt; 0 или wb - item ["WRITE"] & gt; 0): table + = [[pid, name, rb - item ["READ"], wb - item [  WRITE "]]] item [" READ "] = rb;  item ["WRITE"] = wb;  memory [pid] = item;  для элемента в памяти.items (): если элемент [1] ["to_delete"]: memory.pop (item [0]) напечатать "PID" .rjust (7) + "" + "PROCESS" .ljust (30)  + "READ" .rjust (20) + "WRITE" .rjust (20) для строки в таблице: print row [0] .rjust (7) + "" + str (строка [1]). Ljust (30) +  ("% 5.2f"% (строка [2] / (sleep_time * unit)) + unit_name + "/ s"). Rjust (20) \ + ("% 5.2f"% (строка [3] / (sleep_time * unit  )) + unit_name + "/ s"). rjust (20) print "\n *", unit_name, "=", int (unit), "Bytes" sleep (sleep_time);   
1
ответ дан 13 August 2018 в 16:35

Другие вопросы по тегам:

Похожие вопросы: