服務(wù)經(jīng)常就出現(xiàn)busy狀態(tài)? 使用strace查看提示如下信息
18:15:07.511241 write(1, " >>Send dat"..., 125) = -1 EAGAIN (Resource temporarily unavailable)
18:15:07.511263 select(2, [], , [], {60, 0}) = ? ERESTARTNOHAND (To be restarted if no handler)
由于狀態(tài)已進(jìn)入busy就自動重新了 無法使用lsof追蹤問題。
?
請問這個busy問題是如何引起的,因?yàn)楝F(xiàn)在還是內(nèi)測階段,負(fù)載非常小,幾乎不存在任何高并發(fā)的情況。并且socket傳輸?shù)男畔⒅蛔鳛榍岸私换バ畔⑹褂?,并沒有復(fù)雜的后端業(yè)務(wù)。
?
?
1、write(...)??-1 EAGAIN (Resource temporarily unavailable) 代表內(nèi)核發(fā)送緩沖區(qū)寫滿了,裝不下了,所以喊進(jìn)程不斷的重試,你業(yè)務(wù)是否有死循環(huán)或報異常? 對端接收數(shù)據(jù)正常?? php start.php status 觀察下是否有異常?
2、參考官方解決方案:?http://doc.workerman.net/debug/busy-process.html
感謝~ 業(yè)務(wù)并沒有死循環(huán)也沒有異常 就是消息發(fā)送過快時候就會出現(xiàn)這個問題?
執(zhí)行php start.php status 顯示如附件
嘗試參考官方解決方案,但是由于進(jìn)程一但進(jìn)入busy狀態(tài),進(jìn)程就會自動殺死并重開一個進(jìn)程,無法通過lsof的方式查看到底問題出現(xiàn)在哪里。請問內(nèi)核發(fā)送緩沖區(qū)是否可以設(shè)置大一些來解決這個問題嗎
1、內(nèi)核的發(fā)送緩沖區(qū)是可以修改的【直接修改linux內(nèi)核相關(guān)參數(shù)或者用socket_set_option函數(shù)操作,具體參考手冊】,但是這個是治標(biāo)不治本。
2、你這個是由于發(fā)送消息過快,對端接收的慢,導(dǎo)致發(fā)送端緩沖區(qū)寫滿,建議你設(shè)置onBufferFull、onBufferDrain回調(diào)來控制流量頻率。
3、至于你說的進(jìn)程自動重啟,這個不知道你怎么測的,不覺明歷。