У меня следующая настройка: удаленные устройства, на которых запущен активный zabbix_agentd (версия 2.0) с использованием socat для туннелирования через HTTPS-прокси.
На стороне сервера: Apache с прокси-сервисом, позволяющим ПОДКЛЮЧАТЬСЯ к localhost:10051 (zabbix_proxy). Соединение зашифровано с помощью SSL, требующего действительный клиентский сертификат.
На стороне клиента: командная строка Socat beta8:
socat -d -d -ly "TCP-LISTEN:10051,bind=127.0.0.1,reuseaddr,fork" "PROXY:127.0.0.1:10051,connect-timeout=30 | OPENSSL:<server_domain_name>:443,connect-timeout=30,cafile=<CA_CERT_FILE>,certificate=<CLIENT_CERT_FILE>"
zabbix_agentd настроен на работу только в активном режиме и подключение к localhost:10051
Проблема: на некоторых машинах (небольшое меньшинство) некоторые соединения не закрываются должным образом, и дочерний процесс socat зависает с сокетом TCP в состоянии CLOSE_WAIT. У рассматриваемого сокета локальная конечная точка 127.0.0.1:10051, поэтому, похоже, что zabbix_agentd является виновником того, что не закрывает сокет правильно. Зависшие процессы socat потребляют много циклов ЦП и в конечном итоге приводят к сбою системы. Единственный способ их очистить — использовать сигнал SIGKILL.
Есть ли какие-нибудь рекомендации по решению этой проблемы, помимо периодического завершения зависших процессов?
Спасибо.