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