답변:
파일은 /proc/<pid>/io
필요한 것을 나타냅니다. 와 비슷한 출력을 얻는 것은 약간의 스크립팅 작업 iotop
입니다. 파일 값에 대한 리눅스 커널 문서 를 참조하십시오 /proc/<pid>/io
:
챠르
I / O 카운터 : 문자 읽기이 작업으로 인해 저장소에서 읽은 바이트 수입니다. 이것은 단순히이 프로세스가 read () 및 pread ()에 전달한 바이트의 합계입니다. 여기에는 tty IO와 같은 것이 포함되며 실제 물리 디스크 IO가 필요한지 여부에 영향을받지 않습니다 (읽기가 pagecache에서 만족되었을 수 있음).
char
I / O 카운터 : chars written이 작업으로 인해 발생하거나 디스크에 기록되는 바이트 수입니다. rchar와 비슷한 경고가 여기에 적용됩니다.
[...]
read_bytes
I / O 카운터 : 바이트 읽기이 프로세스로 인해 실제로 스토리지 계층에서 페치 된 바이트 수를 세려고 시도했습니다. submit_bio () 레벨에서 완료되었으므로 블록 백업 파일 시스템에 정확합니다.
write_bytes
I / O 카운터 : 쓴 바이트이 프로세스로 인해 스토리지 계층으로 전송 된 바이트 수를 세려고 시도했습니다. 이것은 페이지 디렉토리 시간에 수행됩니다.
이제 작은 bash
스크립트를 사용할 수 있습니다 .
#!/bin/bash
if [ "$(id -u)" -ne 0 ] ; then
echo "Must be root" 2>&1
exit 1
fi
delay=2
lista=$(for p in $(pgrep "."); do echo -n "$p "; grep ^rchar /proc/$p/io 2>/dev/null; done)
while :; do
echo "-----"
listb=$(for p in $(pgrep "."); do echo -n "$p "; grep ^rchar /proc/$p/io 2>/dev/null; done)
echo "$lista" | while read -r pida xa bytesa; do
[ -e "/proc/$pida" ] || continue
echo -en "$pida:\t"
bytesb=$(echo "$listb" | awk -v pid=$pida '$1==pid{print $3}')
echo "$((($bytesb - $bytesa) / $delay)) b/s"
done | sort -nk2 | tail
sleep $delay
listb=$lista
done
2 초간 지연되는 두 개의 목록을 생성 한 후 ( $delay
: 감소 또는 감소 가능), 목록을 비교하고 차이를 계산합니다. I / O가 가장 많은 10 개의 프로세스는 마지막 2 초 동안 I / O 밴드와 함께 인쇄됩니다. I / O를 읽는 대신 I / O를 쓰려면 grep
목록에서 다음 wchar
대신에 명령을 편집하십시오 rchar
.
lista=$(for p in $(pgrep "."); do echo -n "$p "; grep ^wchar /proc/$p/io 2>/dev/null; done)
listb=$(for p in $(pgrep "."); do echo -n "$p "; grep ^wchar /proc/$p/io 2>/dev/null; done)