webman框架經(jīng)常重啟或者關(guān)閉之后,htop發(fā)現(xiàn)存在僵尸進(jìn)程,確定不是pid文件被覆蓋的問(wèn)題。重啟跟stop都正常。之前用workorman3.4的版本是沒(méi)有出現(xiàn)這種現(xiàn)象的?,F(xiàn)在webman中workerman版本4.0.19。請(qǐng)問(wèn)從什么地方排查原因呢?
查看worker.log
這個(gè)是僵尸進(jìn)程的運(yùn)行內(nèi)容
這個(gè)不是僵尸進(jìn)程,是進(jìn)程沒(méi)有退出干凈。
看下業(yè)務(wù)代碼是否用了pcntl_fork
另外啟動(dòng)后 ps auxf
看下webman進(jìn)程關(guān)系并截圖,stop后出現(xiàn)僵尸進(jìn)程后 ps auxf
看下進(jìn)程關(guān)系并截圖。
項(xiàng)目搜索pcntl_fork,只在worker.php上存在使用。出現(xiàn)頻率蠻高,開(kāi)發(fā)期間幾天會(huì)出現(xiàn)一次,生產(chǎn)環(huán)境也在更新版本時(shí)出現(xiàn)了。等下次出現(xiàn)在評(píng)論中截圖
可以看到start.php已經(jīng)退出了,但是busniessworker.php卻沒(méi)有正常退出,出現(xiàn)了兩份進(jìn)程
我截圖了worker.log進(jìn)程重名報(bào)錯(cuò),這個(gè)是最早出現(xiàn)時(shí)候worker的報(bào)錯(cuò)提示
現(xiàn)在是在本地的服務(wù)端出現(xiàn)的,之前就是收到kill掉,后面發(fā)現(xiàn)線上生產(chǎn)環(huán)境-d守護(hù)模式也出現(xiàn)了
workerman 信號(hào)相關(guān)做了一些優(yōu)化,更新到 workerman 4.0.29 試下。 composer require workerman ^4.0.29