第一次接觸workman-json-rpc,調用服務的時候有時候會返回recvData empty,時好時壞。超時時間我設置的15秒,但是每次都很快返回recvData empty,跟蹤代碼,發(fā)現(xiàn)是RpcClient.php文件里的recvData方法,fgets返回false(connection是正確的),請問可能是什么導致的。
應該是連接斷開了,一般是業(yè)務代碼發(fā)致命錯誤,或者業(yè)務代碼調用了exit、die導致。
如果發(fā)生致命錯誤會在workerman.log里可以看到錯誤日志。
發(fā)生問題的時候php start.php status 能看到一些信息進程退出碼信息
感恩解答,我看只要出錯,日志里拋出的就是pid:25765 worker[JsonRpc:25871] exit with status 11,翻看到了類似的帖子,這個原因是用了不穩(wěn)定php擴展導致的嗎(裝的擴展沒變,以前一直用的hprose-rpc直接調用的沒有問題),還有可能是其他原因嗎
你這個問題我也遇到過,還有一種可能就是:
Services里的業(yè)務運行超時了【即超過了?RpcClient::TIME_OUT】,對于RpcClient來說, RpcClient::TIME_OUT意味著服務端的業(yè)務必須在?RpcClient::TIME_OUT 內將數據給我扔回來,否則客戶端會關閉連接。
?
感恩解答,我看錯誤日志里顯示的pid:25765 worker[JsonRpc:25871] exit with status 11,請問這個錯誤碼是因為不穩(wěn)定的php擴展導致的嗎,感謝
@5200: exit with status 11 表明進程收到了 SIGSEGV 信號,SIGSEGV代表在POSIX兼容的平臺上,SIGSEGV是當一個進程執(zhí)行了一個無效的內存引用,或發(fā)生段錯誤時發(fā)送給它的信號。
據此推測最大可能的原因是:
1、使用了不穩(wěn)定的PHP擴展導致內存泄漏;
2、程序本身可能導致的內存泄漏,比如使用了類的靜態(tài)數組;
感謝指導,起先還以為以為是zookeeper擴展的問題,刪掉了RpcClient里改造的代碼,后來發(fā)現(xiàn)是因為項目里還繼承了hprose-rpc的service,去掉就好了,感謝感謝
狀態(tài)圖如下