Периодически (1-2 раза в месяц) встречаю такую ошибку при подключении по API (Sphinx 3): connection to localhost:9312 failed (errno=99, msg=Cannot assign requested address)
Может повторяться 3-10 раз подряд, потом подключается нормально. И снова эти ошибки… и так на протяжении часа, двух или суток. Затем все нормализуется до следующего случая.
В чем может быть дело?
“ping localhost” в консоли в это время каких-либо отклонений не показывает.
ну лучше переключится на manticore - тк со времен opensource Sphinx, там все очень сильно поменяться должно и почему щас в Sphinx возникает такая ошибка - не понятно
так же вы можете стартовать демон с ключем --logdebug \ --logdebugv для того, чтобы логировать действия на стороне сервера и когда такая ошибка возвращается клиенту, посмотреть в логе демона, что происходило
Проверяю количество активных соединений с 9312 так:
netstat -anlp | grep :9312 | grep TIME_WAIT -wc
Заметил, что когда число превосходит 32000 соединений, начинают ссыпаться эти ошибки. Я так понимаю соединение с 9312 висит какое-то время.
Разве по завершению php-скрипта соединение с портом 9312 не должно автоматически закрываться?
Метод Close() из API проблему с активными соединениями не решает.
соединение с портом 9312 не должно автоматически закрываться?
TCP соединения полностью в принципе не закрываются по вызову метода типа Close(). Вот тут https://blog.kireev.pro/2017/07/проблемы-с-очередью-time_wait/ почитайте “Проблема TIME_WAIT для исходящих соединений” . Там и про вашу изначальную ошибку 99 есть.
Спасибо.
Собираюсь поменять логику работы скрипта. Как правильно с помощью API проверить, что соединение связанное с объектом $shpinx активно и готово к получению запросов (перед повторным выполнением метода $sphinx->Query() )?
Вот этого будет достаточно? :
if ($sphinx instanceof SphinxClient && !$sphinx->IsConnectError()) …
$sphinx = new SphinxClient();
$sphinx->SetServer(‘localhost’,9312);
Вызывается только один раз за время работы скрипта, но каждый запрос $sphinx->Query(…) похоже создает новое соединение. Может в конфиге надо что-то настроить?
теперь такой вопрос: возможно ли как-то использовать одно и тоже соединение с 9312 из разных php-скриптов, которые запрашиваются разными пользователями сайта?
Конкретно про sphinxapi - думаю возможно, можно попробовать вместо fsockopen() использовать pfsockopen(), но какие будут последствия предсказать сложно.