Ситуация когда 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
Примененное значение будет выведено в консоль в случае если ошибок нет.
Также при борьбе с 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