Workerman-RPC抛出recvData异常问题,急!

0

Hi,walkor,


  目前该问题已是在生产项目上,我在PHP脚本里面直接引用RPCclient.php,然后远程调用RPC服务器往数据库里写数据,脚本执行完一段时间后发现脚本的进程退出了,看了一下日志是RPC抛异常了:Uncaught exception 'Exception' with message 'recvData empty',导致脚本进程退出

我有几点想请问一下:
1,Uncaught exception 'Exception' with message 'recvData empty'是什么原因导致的?,我看了下代码是没有问题的(因为正常跑过一段时间),看了下RPC服务器中workerman.log中也没异常日志,
2,远程请求RPC时,Uncaught exception 'Exception' with message 'recvData empty' 这种异常是不能避免的吗?
3.如果我有asend_ 异常方法调用的话,会出现这种异常吗?如果出现了,但对脚本进程有影响吗?


谢谢walkor解答!

已邀请:

walkor

赞同来自: shushu

recvData empty 意思是客户端发给服务端的请求超过5秒还没有返回结果,也就是说rpc服务端处理超时了。
应该是rpc的业务比较慢导致的。具体为什么慢需要你们自己定位,可能是msyql语句执行的慢、可能是curl访问外部接口慢等等原因。


https://github.com/walkor/workerman-JsonRpc/blob/master/Applications/JsonRpc/Clients/RpcClient.php#L56
超时时间是这里设置的,超时时间默认是5秒。


asend_ 异常方法调用的话,如果服务端超时,也会出现这种异常。

xiewen_kevin - PHP是艺术...

赞同来自:

RPC方法里面的业务 主要是将新闻资讯等写入数据库

walkor

赞同来自:

WORKER EXIT UNEXPECTED E_ERROR Allowed memory size of 335544320 bytes exhausted (tried to allocate 65536 bytes)
看起来像是客户端给rpc服务端发起了超大的请求导致的。
不过也有可能是业务有内存泄漏导致的。

xiewen_kevin - PHP是艺术...

赞同来自:

是的 内存满了,walkor ,我找到原因在哪里了,是因为脚本不断通过异常方式asend_ 远程调用RPC服务导致连接数(connections)不断增加导致的,我在测试机上测试了一下,把RPC服务里面被调用的方法的业务全部注释掉了,只留一个空方法,结果还是一样,达到一定连接数时,内存就满了(如附件图所示)
测试的时候,status里面显示connections是不断增加的,连接并没有释放掉


请问一下,asend_ 异步调用rpc服务后不会马上就断开连接的吗? 如果不是,那连接是什么时候断开的呢?

walkor

赞同来自:

asend_会建立链接
arecv会关闭链接
看看是不是没有调用arecv

要回复问题请先登录注册