Linux - task timeout more than 120 seconds

Периодически на сервере стала возникать проблема с тайм аутами, типа:

INFO: task rs:main Q:Reg:1035 blocked for more than 120 seconds.
Aug 22 15:39:56 servercore kernel: "echo 0 > /proc/sys/kernel/hung_task_timeout_secs" disables this message.

Суть проблемы (спасибо determination за просвещение) заключается в том, что:

По умолчанию система использует около 40% доступной памяти для кэширования файловой системы, когда эта отметка будет достигнута файловая система выгружает лишние данные на диск, синхронизируя все сопутствующие IO процессы. Есть таймаут для этой процедуры, обычно 120 секунд, если IO подсистема (ввода-вывода) не достаточно быстро отрабатывает и не успевает сделать это за 120 секунд, тогда ты получаешь такое сообщение. Пбычно проявляется, когда дохерища оперативы.
Регулируется это несколькими параметрами - vm.dirty_ratio, vm.dirty_background_ratio, где можно указать сколько процентов исользовать и которые можно указать либо в файле /etc/sysctl.conf, либо командой: [code] sysctl -w vm.dirty_ratio=10 && sysctl -w vm.dirty_background_ratio=5 [/code] После чего сохраним параметры: [code] sysctl -p [/code] Можно отсинхронизировать данные и кеша, а так же очистить кеш: [code] sync; echo 3 > /proc/sys/vm/drop_caches; [/code] Просмотреть текущие параметры можно так: [code] sysctl -a | grep dirty [/code] Так же по теме нашлось: https://lonesysadmin.net/2013/12/22/better-linux-disk-caching-performance-vm-dirty_ratio/ https://www.blackmoreops.com/2014/09/22/linux-kernel-panic-issue-fix-hung_task_timeout_secs-blocked-120-seconds-problem/

Описания параметров:

  • dirty_background_ratio: Если ваша цель снизить количество данных, хранимое в кэше, так что данные будут писаться на диск постепенно, а не все сразу, то уменьшение этого параметра наиболее эффективный путь. Более приемлемо значение по умолчанию для систем имеющих много оперативной памяти и медленные диски.
  • dirty_ratio: Второй по значимости параметр для настройки. При значительном снижении этого параметра приложения, которые должны писать на диск, будут блокироваться все вместе.
  • dirty_expire_centisecs: Можно уменьшить, но не сильно. Позволяет уменьшить время нахождения страниц в кэше до записи на диск, но это значительно снизит среднюю скорость записи на диск, т.к. это менее эффективно. Это особенно проявится на системах с медленными дисками.