Назад | Перейти на главную страницу

zabbix_agent + socat зависает с close_wait

У меня следующая настройка: удаленные устройства с активным 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.

Какие-нибудь рекомендации по решению этой проблемы, кроме периодически убивающего зависшие процессы?

Спасибо.