Назад | Перейти на главную страницу

Узнайте, почему диск в Linux загружен на 100%

У меня есть виртуальная машина, на которой запущено приложение. Через некоторое время его нагрузка начинает увеличиваться, и машина перестает отвечать на команды.

После мониторинга использования дисков я обнаружил, что смонтированный SSD-диск (AWS EBS General SSD), используемый приложением, на 100% занят без чтения и записи из nmon.

Снимок nmon является:

Снимок top является:

Я также пробовал использовать iotop чтобы найти чтение и запись, но нет процесса, выполняющего много операций чтения / записи.

Выход iostat -x 2 5 является:

Помимо этого, все ps команды застревают и входят в D штат.

Как найти причину 100% занятости диска?

Редактировать: Смонтированный раздел использует файловую систему XFS.

Используйте следующий скрипт для просмотра - кто читает / записывает на диск:

#!/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"