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