2014-07-12 10 views
5

Sto cercando alcuni strumenti che eseguiranno il dump dell'I/O del disco totale dopo un singolo processo al termine. Finora il mio risultato è: -Calcola l'I/O del disco totale con un singolo processo

  • iotop = Essa mostra I/O al processo in tempo reale, ma non dà totale dopo la fine del processo.
  • iostat = Essa mostra in tempo reale di I/O, ma non dire processo

Per esempio, ho qualche processo in esecuzione in background con PID ####. Ho bisogno dei Byte Totali Scritto e Leggi il da quel processo in totale dopo la fine del processo. Qualcuno può dire come posso estrarre queste informazioni dato un PID di processo.

+0

Date un'occhiata a '/ proc//io' e http://stackoverflow.com/a/3634088/3776858 – Cyrus

risposta

4

Sentitevi liberi di giocare con questo scarabocchio (myio.sh):

#!/bin/bash 

TEMPFILE=$(tempfile) # create temp file for results 

trap "rm $TEMPFILE; exit 1" SIGINT # cleanup after Ctrl+C 

SECONDS=0    # reset timer 

[email protected] &     # execute command in background 

IO=/proc/$!/io   # io data of command 
while [ -e $IO ]; do 
    cat $IO > "$TEMPFILE" # "copy" data 
    sed 's/.*/& Bytes/' "$TEMPFILE" | column -t 
    echo 
    sleep 1 
done 

S=$SECONDS    # save timer 

echo -e "\nPerformace after $S seconds:" 
while IFS=" " read string value; do 
    echo $string $(($value/1024/1024/$S)) MByte/s 
done < "$TEMPFILE" | column -t 

rm "$TEMPFILE"   # remove temp file 

Sintassi: ./myio.sh <your command>

Esempi:

  • ./myio.sh dd if=/dev/zero of=/dev/null bs=1G count=4096
  • come root: ./myio.sh dd if=/dev/sda1 of=/dev/null bs=1M count=4096

Si prega di cambiare dd of= nell'ultimo esempio solo se sai cosa stai facendo.


Con questo semplice script di me non potete guardare un processo già in esecuzione e il suo IO.

Sintassi: pio.sh PID

#!/bin/bash 

[ "$1" == "" ] && echo "Error: Missing PID" && exit 1 
IO=/proc/$1/io   # io data of PID 
[ ! -e "$IO" ] && echo "Error: PID does not exist" && exit 2 
I=3      # interval in seconds 
SECONDS=0    # reset timer 

echo "Watching command $(cat /proc/$1/comm) with PID $1" 

IFS=" " read rchar wchar syscr syscw rbytes wbytes cwbytes < <(cut -d " " -f2 $IO | tr "\n" " ") 

while [ -e $IO ]; do 
    IFS=" " read rchart wchart syscrt syscwt rbytest wbytest cwbytest < <(cut -d " " -f2 $IO | tr "\n" " ") 

    S=$SECONDS 
    [ $S -eq 0 ] && continue 

cat << EOF 
rchar:     $((($rchart-$rchar)/1024/1024/$S)) MByte/s 
wchar:     $((($wchart-$wchar)/1024/1024/$S)) MByte/s 
syscr:     $((($syscrt-$syscr)/1024/1024/$S)) MByte/s 
syscw:     $((($syscwt-$syscw)/1024/1024/$S)) MByte/s 
read_bytes:   $((($rbytest-$rbytes)/1024/1024/$S)) MByte/s 
write_bytes:   $((($wbytest-$wbytest)/1024/1024/$S)) MByte/s 
cancelled_write_bytes: $((($cwbytest-$cwbytes)/1024/1024/$S)) MByte/s 
EOF 
    echo 
    sleep $I 
done 
+0

Quale di questi significano ciascuno valori? Come per un caso di mysql, quale valore dovrei annotare per calcolare l'I/O del disco esatto usato dal mio processo mysql? – Vineeth

+0

@Vineeth: questo dovrebbe aiutare: [Capire i contatori in /proc/pid/io](https://stackoverflow.com/a/3634088/3776858) – Cyrus

+0

Brother, che ha aiutato. Ho l'incarico di migrare la mia installazione di produzione mysql on-premise su RDS. Quindi è necessario calcolare l'I/O del disco esatto usato da mysql. – Vineeth

Problemi correlati