Рабочий процесс, выполняющий вызовы SOAP, генерирует бесконечные дескрипторы файлов CLOSE_WAIT

Я запускаю рабочий процесс очереди PHP, который обрабатывает задания, которые в свою очередь создают клиентов SOAP и выполняют запросы SOAP. Я постараюсь набросать псевдокод как можно более четко.

Задания и параметры сохраняются в базе данных и создаются работником. В упрощенном виде рабочий выглядит так:

while(true) {
$job = initiateFromDatabase($id);
$job->handle()
}

Для определенной работы создается экземпляр SOAPClient и выполняется вызов SOAP. Некоторые результаты сохраняются в базе данных.

Проблема в том, что процесс довольно скоро достигнет предела количества открытых файловых дескрипторов. После некоторого осмотра с lsof -a -p <worker_pid> в CLOSE_WAIT висят сотни дескрипторов TCP.

Я провел интенсивные исследования и пришел к выводу, что нет способа явно закрыть сокет-соединение SOAP (и базовый).

Единственный способ очистить сотни дескрипторов CLOSE_WAIT — просто уничтожить рабочий процесс.

Как я могу убедиться, что могу запустить работника в течение более длительных периодов времени и заставить дескрипторы CLOSE_WAIT исчезать после того, как экземпляр SOAPClient больше не используется?

Заранее спасибо.

2

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]