查找 Linux 中磁盘利用率达到 100% 的原因

查找 Linux 中磁盘利用率达到 100% 的原因

我有一个虚拟机正在运行一个应用程序。一段时间后,它的负载开始增加,并且机器对命令没有响应。

在监控磁盘使用情况后,我发现应用程序使用的已挂载 SSD 磁盘(AWS EBS 通用 SSD)处于 100% 繁忙状态,没有读写nmon

快照为nmon在此处输入图片描述

快照为top在此处输入图片描述

我也尝试用它iotop来查找读取和写入,但没有进行大量读取/写入的进程。

的输出iostat -x 2 5为: 在此处输入图片描述

除此之外,所有ps命令都陷入卡住状态并进入D状态。

如何查找磁盘繁忙/利用率 100% 的原因?

编辑: 挂载的分区使用XFS文件系统。

答案1

使用下一个脚本查看谁读/写磁盘:

#!/bin/sh

dmesg -c >/dev/null 2>&1
echo 1 > /proc/sys/vm/block_dump

# Timeout
sleep 60

# Disable block dumping
echo 0 > /proc/sys/vm/block_dump


# Header
printf "%10s %15s %10s %10s %10s\n" CONUT COMMAND PID ACTION DEVICE

# Hide the eyes child! It gets ugly from here on
IFS="
"

for line in $(dmesg | awk '{if ( $3 ~ "READ" || $3 ~ "WRITE" ) { print  $2 " " $3 " " $7}}'| sort |uniq -c |sort -nr );
             do
                num=$(echo $line | awk '{print $1}')
                command=$(echo $line | awk '{ print $2 }' | sed -re 's/\([[:digit:]]+\)://')
                pid=$(echo $line| awk -F'[()]' '{ print $2 }')
                action=$(echo $line | awk '{ print $3 }')
                device=$(echo $line | awk '{ print $4 }')

                printf "%10s %15s %10s %10s %10s\n" "$num" "$command" "$pid" "$action" "$device"
done
# EOF

注意:根据操作系统和 dmesg 输出,您可能必须更改“for line in”行中的字段”

相关内容