1.iostat
iostat [选项] [时间间隔] [次数]选项:-c:仅显示 CPU 使用情况统计。-d:仅显示磁盘使用情况统计。-x:显示详细的设备统计。-m:所有尺寸信息以 MB 单位显示。-p [设备]:显示指定磁盘分区的统计信息,没有指定设备时显示所有分区信息。-t:在输出中包含时间戳信息。-h:输出以更容易阅读的格式显示。-V:显示程序版本。
iostat
iostat -c
iostat -dx
iostat -m
iostat -p sda
iostat 2 5
iostat -tx 2 5
iostat -tx 2 3
Linux 4.19.91-007.ali4000.alios7.x86_64 (109d04301.cloud.d07.am11) 06/06/2024 _x86_64_ (96 CPU)avg-cpu: %user %nice %system %iowait %steal %idle15.34 0.00 8.96 0.02 0.00 75.68Device: rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq-sz avgqu-sz await r_await w_await svctm %util
sda 0.00 5.63 0.46 19.69 57.69 136.07 19.24 0.03 1.37 0.61 1.39 0.05 0.10
nvme1n1 0.00 1557.83 86.97 1981.93 2442.73 41908.82 42.87 0.30 0.10 0.14 0.09 0.01 3.07
nvme0n1 0.00 14.70 0.23 15.02 28.95 430.81 60.31 0.00 0.07 0.35 0.07 0.06 0.09
loop0 0.00 0.00 0.11 1.07 14.43 3.35 30.09 0.00 0.54 0.09 0.59 0.09 0.01
dm-0 0.00 0.00 0.00 1.07 0.09 3.94 7.52 0.00 0.54 0.09 0.54 0.42 0.05Device:显示的是设备名,如 sd(a-z)、nvme(n) 等。rrqm/s:每秒进行合并的读请求的数量。wrqm/s:每秒进行合并的写请求的数量。r/s:每秒完成的读次数。w/s:每秒完成的写次数。rkB/s:每秒从设备(磁盘)读取的数据量(KB)。wkB/s:每秒向设备(磁盘)写入的数据量(KB)。avgrq-sz:平均每次I/O操作的数据量(扇区)。avgqu-sz:平均I/O请求队列的长度。await:I/O请求的平均等待时间(毫秒)。r_await:读请求的平均等待时间(毫秒)。w_await:写请求的平均等待时间(毫秒)。svctm:平均服务时间(毫秒)。注意,此列在新版的 Linux 内核中可能已不支持。%util:设备的利用率百分比,接近 100% 时表示设备可能已成为瓶颈。
2.排查命令
top
htop
iotop
iostat -x 1
vmstat 1
lsof -p $pid
ll /dev/mappertsar -I dm-0 -i1 -l
因此,完整的命令 tsar -I dm-0 -i1 -l 用于实时连续监控并每1秒显示设备映射 dm-0 的统计数据。
echo 1 > /proc/sys/vm/block_dump ; sleep 60 ;dmesg |awk ' /dm-0/ {print $2}' |sort |uniq -c | sort -rn ;echo 0 > /proc/sys/vm/block_dump;
最后,通过向 /proc/sys/vm/block_dump 写入0来禁用 block_dump 功能,防止其影响系统性能或生成过多的日志数据。
总的来说,这段命令用于捕捉和分析在60秒内对设备 'dm-0' 的所有访问事件,并对访问最频繁的进程进行排序输出。这可以帮助系统管理员或开发者分析哪些进程在给定时间内频繁访问特定的块设备,从而对系统的性能瓶颈或异常行为进行诊断。请注意,在实际环境中执行此命令可能需要 root 权限,因为修改 /proc/sys/vm/block_dump 和读取 dmesg 输出通常需要高级权限。此外,启用 block_dump 可能会产生大量日志输出,应谨慎使用。
3.tsar
tsar --io -I dm-0 -i 1for i in `docker ps -q`;do echo $i;docker exec $i crontab -l 2>/dev/null |grep "/5";done
9e9afc08e9b7
*/5 * * * * find /alidata/www/logs/ -mtime +3 -type f -name "*.log*" |xargs rm -rf;
*/5 * * * * /usr/sbin/logrotate /alidata/conf/log_rotate.confed555455e8a5
*/5 * * * * date >/tmp/test.log9e575b226ba3
*/5 * * * * find /alidata/logs/ -mtime +0 -type f -name "*.log*"|xargs rm -rf;
*/5 * * * * /usr/sbin/logrotate /alidata/conf/log_rotate.conf34c6c3398bf5
*/5 * * * * (echo `date` > /var/log/cron.log; find /alidata/www/logs -mtime +0 -type f -name "*.log*" | xargs rm -f;)5a86fcb49739
*/5 * * * * find /alidata/www/logs/ -mtime +3 -type f -name "*.log*" |xargs rm -rf;
*/5 * * * * /usr/sbin/logrotate /alidata/conf/log_rotate.conf761dbad2d3a2
*/5 * * * * find /alidata/www/logs/ -mtime +3 -type f -name "*.log*" |xargs rm -rf;
*/5 * * * * /usr/sbin/logrotate /alidata/conf/log_rotate.conf
docker ps | grep 9e9afc08e9b7docker ps | grep ed555455e8a5docker ps | grep 9e575b226ba3docker ps | grep 34c6c3398bf5docker ps | grep 5a86fcb49739docker ps | grep 761dbad2d3a2
发现是tianjimon的一些容器里面的定时任务在异常 可以采用注释掉定时任务 观察10分钟的方式 发现io水位不再飙升 定位问题就出现在这里kubectl get pods -n=tianjimon | grep acc | grep -v slave | awk '{print "kubectl delete pod",$1,"-n=tianjimon"}' | bash