Время от времени наш Linux-сервер LAMP (использующий PHP-FPM, XFS на тонком LVM на HW RAID, Centos8) становится недоступным и перестает отвечать на HTTP(S)-запросы.
С помощью централизованного ведения журнала мы обнаружили, что в таких случаях средняя загрузка быстро достигает сотен, в то время как все больше и больше процессов (systemd-journald, процессы php, потоки ядра xfs/dm...) переходят в состояние D. По данным iostat и pidstat, ЦП и диск почти не загружены, а средняя нагрузка колеблется в районе 170, что довольно странно. Из вывода htop/ps не видно ни одного, ни группы мошеннических процессов, которые могли бы объяснить такое поведение. Это просто стандартные процессы, которые, кажется, сталкиваются с каким-то «блокпостом».
Единственная другая странность с мониторингом дисков заключается в том, что во время этих событий перегрузки iostat периодически сообщает о довольно высоком w_await для раздела /var (2500-5000 мс, в то время как другие разделы, такие как /var/log, /var/lib/mysql, в основном не преодолеваются). 10 мс). Этот раздел большую часть времени должен быть тихим, поэтому неясно, почему iostat сообщает о таком большом времени w_await.
Тогда единственное решение — выключить и снова включить сервер.
Это происходит на двух серверах одного типа и никогда на других. Кажется, это какая-то неисправность ФС/блочного слоя/контроллера/диска; многие процессы внезапно начинают ждать диска или чего-то еще в ядре, но, согласно iotop/iostat, диск мало что делает.
Есть ли способ запросить драйвер FS/блочного уровня/контроллера ядра Linux, что именно они делают с хранилищем и от имени какого процесса? Стандартные инструменты, такие как iotop/iostat, сообщают мне только имена активных процессов ввода-вывода и активность разделов диска, но не сообщают, какие процессы обращаются к какому разделу диска и что именно они там делают.