加入收藏 | 设为首页 | 会员中心 | 我要投稿 财气旺网 - 财气网 (https://www.caiqiwang.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 服务器 > 搭建环境 > Linux > 正文

linux – 通过单个进程计算总磁盘i / o

发布时间:2020-12-31 13:14:00 所属栏目:Linux 来源:网络整理
导读:我正在寻找一些工具,它将在结束后通过单个进程转储整个磁盘I / O. 到目前为止,我的发现是: – iotop =它实时显示每个进程的i / o但不给出 过程结束后的总数. iostat =显示实时I / O但是 不告诉过程 例如,我有一些进程在后台运行PID ####.在流程结束后,我需

我正在寻找一些工具,它将在结束后通过单个进程转储整个磁盘I / O.
到目前为止,我的发现是: –

> iotop =它实时显示每个进程的i / o但不给出
过程结束后的总数.
> iostat =显示实时I / O但是
不告诉过程

例如,我有一些进程在后台运行PID ####.在流程结束后,我需要在整个流程中编写和读取总字节数.任何人都可以告诉我如何在给定流程PID的情况下提取此信息.

解决方法

随意玩这个涂鸦(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

$@ &                    # 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
>以root身份:./ myio.sh dd if = / dev / sda1 of = / dev / null bs = 1M count = 4096

只有在您知道自己在做什么的情况下,才能在最后一个示例中更改=的dd.

通过我的这个简单脚本,您可以观看已经运行的进程及其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

(编辑:财气旺网 - 财气网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!