У меня есть виртуальная машина, на которой запущено приложение. Через некоторое время его нагрузка начинает увеличиваться, и машина перестает отвечать на команды.
После мониторинга использования дисков я обнаружил, что смонтированный 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"