2014-07-12 7 views
5

하나의 프로세스가 끝나면 전체 디스크 I/O를 덤프 할 도구를 찾고 있습니다. 지금까지 나의 연구 결과는 다음과 같습니다 -하나의 프로세스로 총 디스크 I/O를 계산하십시오.

  • iotop이 = 그것은 실시간으로 프로세스 당하여 i/o 표시하지만 프로세스 종료 후 총을 제공하지 않습니다.
  • iostat의 =이 I/O 실시간으로 표시하지만, 나는 #### 일부 프로세스는 PID와 백그라운드에서 실행이 예를 들어 과정을

을 말하지 않습니다. 총 바이트가 필요합니다 이 완료되었습니다 프로세스가 끝난 후 해당 프로세스에 의해을 읽으십시오. 누구든지 프로세스 PID가 주어진이 정보를 어떻게 추출 할 수 있는지 말할 수 있습니다.

+0

각 값은 평균이 어떤'/ proc 디렉토리//io' 및 http://stackoverflow.com/a/3634088/3776858 – Cyrus

답변

4

이 낙서 (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 

구문 : ./myio.sh <your command>

예 : 루트로

  • ./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

마지막 예제에서 dd의 of=을 변경하십시오. 알고있는 경우에만 변경하십시오.


이 간단한 스크립트를 사용하면 이미 실행중인 프로세스와 IO를 볼 수 있습니다.

구문 : 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

에서보세요? mysql의 경우와 마찬가지로, mysql 프로세스에서 사용하는 정확한 디스크 I/O를 계산하려면 어떤 값을 사용해야합니까? – Vineeth

+0

@Vineeth : 이것은 당신을 도울 것입니다 : [/proc/pid/io](https://stackoverflow.com/a/3634088/3776858)의 카운터에 대한 이해 – Cyrus

+0

형님. 온 - 프레미스 MySQL 프로덕션 설치를 RDS로 마이그레이션하는 작업이 있습니다. 그래서 mysql이 사용하는 정확한 디스크 I/O를 계산할 필요가있다. – Vineeth