Azure PHP SDK因套接字错误

时间:2015-08-05 09:21:12

标签: php azure azure-storage-queues

我的PHP脚本从我的数据库读取并将消息发送到队列,以便工作者角色(以及其他LAMP机器)可以拉动它们并且并行工作。

但是,在我的apache服务器上的error_log中,我的脚本经常以致命错误结束,并显示以下消息。此错误在发送方。

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

在我看来,socket由于某些原因而抛出异常,因此没有处理,从而导致脚本崩溃。如果您同意,您是否建议修复SDK?

2 个答案:

答案 0 :(得分:1)

第一次传球很快就看到了,但似乎:

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

指的是丢弃的套接字,可能由于以下几个原因而发生:

  • 网站进入冷态(始终打开)
  • 套接字保持开放状态非常长并且由LB
  • 终止
  • 发生意外事件并且套接字崩溃(认为异常写入队列)

您是否能够查看FREB日志或在支持门户(https://[site-name].scm.azurewebsites.net/Support)中运行PHP流程报告来诊断套接字被丢弃的原因?

答案 1 :(得分:0)

您是否尝试过增加php套接字所连接的端点超时值? VM端点的默认超时为4分钟。您可以将其更改为更高的值。这是关于如何做到这一点的文章。 https://azure.microsoft.com/blog/2014/08/14/new-configurable-idle-timeout-for-azure-load-balancer/

在上面的链接中选中此部分:“在虚拟机上创建Azure端点时设置空闲超时”。