ksoftirqd грузит процессор


Ситуация когда ksoftirqd грузит процессор иногда встречается в серверных системах.
ksoftirqd отвечает за обработку прерываний от устройств.



Если ksoftirqd грузит процессор


Нагрузка на сервере характеризуется параметром Load Average (LA).

LA может возрастать когда какие-то процессы активно потребляют ресурсы процессора или память в таких количествах, что они исчерпываются. В значительной степени или полностью.



Другая причина роста LA — ожидание ответа от диска или от сети.

Если в top видно потребление ресурсов процессами ksoftirqd — прежде всего нужно проверить соединения в состоянии TIME_WAIT



Увидеть их можно так

netstat -ntp | grep -v TIME_WAIT


Если их очень много — процессы ждут сеть и нагрузка может расти.

Снять ограничение на количество подобных подключений можно изменив значение параметра ядра /proc/sys/net/ipv4/tcp_tw_reuse с 0 на 1.




Значение модно изменить без перезагрузки системы. В файл /etc/sysctl.conf нужно добавить:

net.ipv4.tcp_tw_reuse = 1

Затем перечитать его такой командой

sysctl -p



Примененное значение будет выведено в консоль в случае если ошибок нет.

ksoftirqd грузит процессор


Также при борьбе с TIME_WAIT иногда меняют и значение параметра tw_recycle. Этого делать не стоит, смена значения может повлечь сложные в диагностике проблемы с доступом к ресурсу у разных пользователей в случайное время.

Со значением 1 опции система не будет обслуживать соединения от двух разных пользователей за одним NAT провайдера.



Нехватка RAM как одна из причин


Также нагрузка создаваемая процессом ksoftirqd может быть причиной простой нехватки оперативной памяти в системе.

Следует проверить ее, воспользоваться командой free.

free -m

total used free shared buff/cache available
Mem: 976 296 81 14 599 522
Swap: 2047 1 2046



Также нужно убедиться в что в syslog нет сообщений о ситуациях out of memory . При необходимости подключить SWAP или поменять значение swappiness

Про контроль нагрузки и утилиту top.

Сказать спасибо