Как предотвратить завершение процесса при большом количестве сетевых ошибок?
Здравствуйте!
Есть приложение-клиент, которое работает по сети с приложением-сервером. Изредка ресурсы сервера исчерпываются и все новые подключения отвергаются. На стороне клиента это проявляется в том, что полинг возвращает большое количество готовых дескрипторов с ошибками. Каждый дескриптор нужно обработать. Поэтому нагрузка на ядро процессора повышается до 100% (в обычных условиях ~50%).
Подытожу. На стороне клиента изредка случаются "аномальные" ситуации, при которых процессу возвращается большое количество сокетных ошибок, а тот в свою очередь нагружает ядро CPU на 100%.
Затем приходит нечто (не oom-killer) и завершает работу процесса. Вероятно, срабатывают какие-то защитные механизмы ОС.
Можно ли отключить такое поведение? Если да, то как?
Надеялся на то, что игнорирование сигналов решит проблему, но надежды не оправдались.
Писать что-то, что будет рестартить процесс при его завершении, - видится мне каким-то ужасным костылем.
UPD. Пока даже не понятно, что именно завершает работу процесса. Прошу подсказать, в какую сторону рыть вообще?
Наверно в вашей ситуации будет логичнее исправить поведение клиента, чем поведение системы. Но мне например без примерного кода сложно что-то конкретно подсказать.