自定義了一個通訊協(xié)議,在Gateway中使用,但是發(fā)生一個問題,請指教:
看上去協(xié)議工作正常,而且相關(guān)消息處理過程也工作正常
客戶端會不停的向服務(wù)器發(fā)送心跳包,較長一段時間后,出現(xiàn)了“failed to open stream: Too many open files ”的錯誤警告
此時只有一個連接的
沒有數(shù)據(jù)庫或其他緩存操作
不知道,出現(xiàn)這種情況,我應(yīng)該從什么地方開始找問題
Too many open files ,
進程打開的文件句柄數(shù)超過系統(tǒng)設(shè)置,你的情況應(yīng)該是進程打開或者接受了很多socket鏈接。
如果你知道報這個錯的進程pid,通過 lsof -nPp 進程pid 查看進程打開了哪些文件句柄
另外linux系統(tǒng)默認系統(tǒng)文件打開數(shù)比較低,建議根據(jù)workerman手冊優(yōu)化下Linux內(nèi)核,否則無法承載大并發(fā)
http://doc3.workerman.net/appendices/kernel-optimization.html
@walkor
我檢查是發(fā)現(xiàn),我自定義的協(xié)議中,如果收到的buffer長度跟收到的消息長度一樣時,我直接return這個包的長度了,對比websocket協(xié)議,發(fā)現(xiàn)正常接收數(shù)據(jù)時,都是處理完decode后,return 0,不知道跟這個有沒有關(guān)系呢?