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