這里詳細描述問題
php start.php status 查到有一些進程 pid老是出現(xiàn)busy, 難道是沒有回收掉嗎
等到全部變成busy之后 訪問都訪問不了
我的代碼很簡單,a來訪問我 ,我?guī)е膮?shù)去c, 做了一個中轉(zhuǎn) 調(diào)用了redis 存了一下key 就沒了,c可能經(jīng)常鏈接他會超時 可能處理的慢,這樣簡單的業(yè)務(wù)為啥造成busy
已經(jīng)不知道啥問題了,動不動就訪問不了,tp雖然處理的慢,但是不會有這種問題。用不動了
業(yè)務(wù)代碼處理的慢,或者有什么超時就會busy
換個說法,如果執(zhí)行status時業(yè)務(wù)進程正在處理業(yè)務(wù),并且超過0.5秒沒有處理完,就顯示busy。
busy就是代表業(yè)務(wù)慢,一般沒有問題,業(yè)務(wù)處理完就恢復(fù)了。但是如果客戶端不斷發(fā)送這種慢請求,那么服務(wù)端的就會一直在busy狀態(tài),可能影響其他客戶端請求。那么加進程,要么優(yōu)化業(yè)務(wù)代碼。
我用的webman, redis不知道有啥問題,造成業(yè)務(wù)api訪問經(jīng)常性的超時,而且cpu莫名會跑慢,后面換成tp 用了swolle 這個問題才好轉(zhuǎn)了。。。,實在是不知道咋用的了。
這不是顯而易見嘛,workerman作為中間代理,但是你的下游導(dǎo)致io阻塞就busy了嘛。
如何解決?
使用workerman/http-client 異步去做代理就行了,要不你就用openswoole 或者 swoole swow 去處理就不會阻塞了。