现在,在其中一个 DBS 中,每天在特定时间在存储上都会看到高写入 I/O。是否有可能找到哪个进程正在执行高写入 I/O。任何与操作系统相关的命令来跟踪位置来自这些请求的到来..除了 iostat 和 top
答案1
我过去曾尝试过 htop。这似乎是根据进程跟踪 IO 使用情况。
显然,Github 上还有很多其他选项,例如“glances”和“atop”。
没有 sudo 权限的非 root 用户的 iotop 替代方案
这让我想知道您的特定情况是否有些独特并且可能需要一些定制(有些人甚至提倡解析来自 proc 的原始统计数据)。有很多选项,包括 iodump(用 Perl 编写)。
root@kanga:~# while true; do sleep 1; dmesg -c; done | perl iodump
^C# Caught SIGINT.
TASK PID TOTAL READ WRITE DIRTY DEVICES
firefox 4450 4538 251 4287 0 sda4, sda3
kjournald 2100 551 0 551 0 sda4
firefox 28452 185 185 0 0 sda4
kjournald 782 59 0 59 0 sda3
pdflush 31 30 0 30 0 sda4, sda3
syslogd 2485 2 0 2 0 sda3
firefox 28414 2 2 0 0 sda4, sda3
firefox 28413 1 1 0 0 sda4
firefox 28410 1 1 0 0 sda4
firefox 28307 1 1 0 0 sda4
firefox 28451 1 1 0 0 sda4
https://www.xaprb.com/blog/2009/08/23/how-to-find-per-process-io-statistics-on-linux/
#!/bin/bash
hostname=`hostname -s`
carbon_host=YOUR_CARBON_HOSTNAME_OR_IP
carbon_port=2003
pidstat -h -d 1 | grep --line-buffered -v '^$' | grep --line-buffered -v '^#' | grep --line-buffered -v '^Linux' | awk --assign=hostname=${hostname} '{ printf "servers.%s.pidstat.%s.read %s %s\nservers.%s.pidstat.%s.write %s %s\n", hostname, $6, $3, $1, hostname, $6, $4, $1 ; fflush(); }' > /dev/tcp/${carbon_host}/${carbon_port}
https://serverfault.com/questions/574708/report-per-process-io-stats-with-pidstat-or-sar
https://serverfault.com/questions/169676/howto-check-disk-io-utilization-per-process