2014-07-12 28 views
5

Toplam disk G/Ç'lerini bittikten sonra tek bir işlemle boşaltılacak bir araç arıyorum. Şimdiye kadar benim bulgudur: -Tek bir işlemle Toplam disk i/o hesaplayın

  • iotop = Gerçek zamanlı olarak işlem başına o/i gösterir ancak sürecin sonundan itibaren toplam vermez.
  • iostat = O G/Ç gerçek zamanlı gösterir ama ben #### bazı süreç PID ile arka planda çalışan var Örneğin için sürecini

söylemez. İşlem bitiminden sonra bu işlemle Toplam Bayt Yazılı ve Okuma'a ihtiyacım var. Bir işlem PID'si verildiğinde bu bilgiyi nasıl çıkarabileceğimi kimse anlatamaz.

+0

her değerler ortalama Bunların neler '/ proc//io' ve http://stackoverflow.com/a/3634088/3776858 – Cyrus

cevap

4

bu karmaşık (myio.sh) ile oynamak için çekinmeyin:

#!/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 

Kullanımı: ./myio.sh <your command>

Örnekler: root olarak

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

Lütfen son örneğinizde dd's of='u yalnızca yaptığınızı biliyorsanız biliyorsanız değiştirin.


Bu basit komut dosyası ile zaten çalışıyor olan bir işlemi ve IO'sunu izleyebilirsiniz.

dizimi: 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

bir göz atın? Bir mysql durumu için olduğu gibi, mysql işlemimin kullandığı disk I/O'yu hesaplamak için hangi değeri not etmem gerekir? – Vineeth

+0

@Vineeth: Bu size yardımcı olacaktır: [/proc/pid/io](https://stackoverflow.com/a/3634088/3776858) 'daki sayaçları anlama – Cyrus

+0

Brother, bu yardımcı oldu. Şirketimdeki mysql üretim kurulumumu RDS'ye taşımak için görevdeyim. Yani mysql tarafından kullanılan tam disk G/Ç'yi hesaplamanız gerekir. – Vineeth