Azure PHP SDK генерирует фатальное исключение с ошибкой сокета

Мой PHP-скрипт читает из моей БД и отправляет сообщения в очередь, чтобы рабочие роли (а также другие машины LAMP) могли получать их и работать параллельно.

Однако, часто мой сценарий заканчивается фатальной ошибкой со следующим сообщением в моем error_log на моем сервере apache. Эта ошибка на отправляющей стороне.

PHP Notice:  fwrite(): send of 414 bytes failed with errno=32
Broken pipe in /home/azureuser/pear/share/pear/HTTP/Request2/SocketWrapper.php on line 202

PHP Fatal error:  Uncaught HTTP_Request2_MessageException:
Error writing request in /home/azureuser/pear/share/pear/HTTP/Request2/Adapter/Socket.php
on line 130

Exception trace

HTTP_Request2_SocketWrapper->write('POST /proxy/mess…')
/home/azureuser/pear/share/pear/HTTP/Request2/Adapter/Socket.php:130

HTTP_Request2_Adapter_Socket->sendRequest(Object(HTTP_Request2))
/home/azureuser/pear/share/pear/HTTP/Request2.php:93

in /home/azureuser/pear/share/pear/HTTP/Request2/SocketWrapper.php on line 206

Мне кажется, что сокет по какой-то причине создает исключение, которое не обрабатывается, и, таким образом, приводит к аварийному завершению сценария. Если вы согласны, вы предлагаете исправить SDK?

1

Решение

Посмотрел это очень быстро для первого прохода, но кажется:

fwrite(): send of 414 bytes failed with errno=32

Относится к удаленному сокету, что может произойти по нескольким причинам:

  • Сайт переходит в холодное состояние (включается всегда)
  • Розетка остается открытой очень долго и заканчивается LB
  • Произошло что-то неожиданное, и сокет падает

Удалось ли вам просмотреть журналы FREB или запустить отчет о процессе PHP на портале поддержки (https: // [сайт-имя] .scm.azurewebsites.net / Поддержка) чтобы диагностировать, почему сокет сбрасывается?

1

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

Вы пытались увеличить значение времени ожидания конечной точки, к которому подключается ваш php-сокет. Время ожидания по умолчанию составляет 4 минуты для конечной точки виртуальной машины. Вы можете изменить это на более высокое значение. Вот статья о том, как это сделать. https://azure.microsoft.com/blog/2014/08/14/new-configurable-idle-timeout-for-azure-load-balancer/

Проверьте этот раздел: «Задать время простоя при создании конечной точки Azure на виртуальной машине» по ссылке выше.

0