請教一下, workerman結(jié)合ci框架, 在定時(shí)調(diào)用ci的model方法時(shí), 內(nèi)存緩慢的增加, 有什么思路可以解決?
如下圖, 是跑了3個(gè)月后的內(nèi)存情況
?
[attach]1755[/attach]
?
可能是ci框架或者業(yè)務(wù)代碼有內(nèi)存泄漏。
最簡單的方法是按照手冊設(shè)置下處理一定數(shù)量請求后重啟進(jìn)程。
參考手冊 http://doc.workerman.net/faq/max-requests.html
?
另外看到每個(gè)進(jìn)程的連接數(shù)很多,7-8千,這個(gè)感覺不正常。服務(wù)端返回?cái)?shù)據(jù)完畢后最好把連接關(guān)閉,避免連接數(shù)不斷增加造成內(nèi)存泄漏。
好的?
1 關(guān)于內(nèi)存泄露, 我按照文檔改了
2 關(guān)于連接數(shù)過多, 是因?yàn)槲矣玫氖?JsonRpc/Clients/RpcClient 來做rpc, 是通過異步發(fā)送請求(如 asend_getInfoByUid()), 我看 RpcClient 的代碼是沒有主動(dòng)closeConnection(), 必須顯式調(diào)用異步接收響應(yīng)(如 arecv_getEmail())才能觸發(fā) closeConnection(). 但這個(gè)異步接收響應(yīng)實(shí)際上是阻塞的, 我就是因?yàn)椴幌胱枞攀褂卯惒秸埱蟮?
也就是說異步rpc中, 每次調(diào)用都會(huì)新建一個(gè)連接, 而不能復(fù)用連接