国产+高潮+在线,国产 av 仑乱内谢,www国产亚洲精品久久,51国产偷自视频区视频,成人午夜精品网站在线观看

死循環(huán)問(wèn)題

Endy

早上發(fā)現(xiàn)Mac風(fēng)扇狂轉(zhuǎn),看了一下活動(dòng)監(jiān)視器,竟然是PHP進(jìn)程占用了接近100%的CPU,這是以前從未發(fā)生過(guò)的。
ps -ef|grep php看了一下,用于web應(yīng)用的是php-fpm,php啟動(dòng)的進(jìn)程只有workerman的幾個(gè)businessworker
重啟workerman,CPU使用降下去了,問(wèn)題解決。
然后開(kāi)始查看原因,打開(kāi)日志,竟然loading了很久, ll看了一下,日志大小達(dá)到2GB。
日志從末尾往上,99%都是一句打?。?/p>

worker[Businessworker:xxxxx] exit with status 9

xxxxx為不停分配的進(jìn)程號(hào),但是每一個(gè)都剛分配好就kill掉了
繼續(xù)往上查看日志,發(fā)現(xiàn)一個(gè)DB異常,error code: 1927 ('Connection was killed')
因?yàn)槲以贓vents里需要bindUid,所以用到了DB查詢(xún),MariaDB主動(dòng)斷開(kāi)連接造成了這個(gè)異常(具體原因還沒(méi)有去詳細(xì)查找,谷歌了一些結(jié)果說(shuō)可能是因?yàn)椴l(fā)造成死鎖,但是這個(gè)地方只有簡(jiǎn)單的讀,一個(gè)SELECT操作并沒(méi)有加鎖,回頭再仔細(xì)看看,先解決死循環(huán)的主要矛盾),所以復(fù)現(xiàn)也很容易,在事件循環(huán)時(shí)故意關(guān)閉數(shù)據(jù)庫(kù)服務(wù)即可。

2750 3 0
3個(gè)回答

小七他哥

看看這樣可不可以解決:

$this->sql = $sql;
        $this->result = mysqli_query($this->conn, $this->sql);

        //參考:https://wenda.workerman.net/question/1793
        if ($this->getErrorNo() == 2006) {
            $this->initConnection();
            $this->result = mysqli_query($this->conn, $this->sql);
            //注意這里不能再做有關(guān)于數(shù)據(jù)庫(kù)的操作,否則會(huì)發(fā)生死循環(huán)
            wlog('數(shù)據(jù)庫(kù)鏈接失效重連');
        }

主要就是在 mysqli_query 或者 mysql_query 這一步下面加個(gè)檢測(cè)當(dāng)前有沒(méi)有錯(cuò)誤號(hào)為 2006 的,如果有錯(cuò)誤就重連一遍數(shù)據(jù)庫(kù)。

  • 暫無(wú)評(píng)論
抽不完的寂寞

連數(shù)據(jù)庫(kù)放在onWorkerStart里試下,不要在onWorkerStart運(yùn)行前連數(shù)據(jù)庫(kù)

  • 暫無(wú)評(píng)論
Endy

連接數(shù)據(jù)庫(kù)是放在Gateway的onMessage里,worker早就啟動(dòng)了。
worker進(jìn)程和數(shù)據(jù)庫(kù)產(chǎn)生了連接,連接過(guò)程中,數(shù)據(jù)庫(kù)突然發(fā)生異常斷掉連接。

1、沒(méi)有弄明白這個(gè)數(shù)據(jù)庫(kù)斷開(kāi)的異常為什么會(huì)kill掉worker
2、為什么新fork的worker立即獲得了SIGKILL的信號(hào)導(dǎo)致不停fork不停kill

  • 小七他哥 2021-07-20

    看源代碼吧,很多地方都寫(xiě)的 exit(250); 這句,這里就是被kill 了

  • Endy 2021-07-20

    不是在exit(250)被kill的,這句之前都會(huì)有l(wèi)og,但日志里面就只有exit with status 9,我試了直接從命令行kill -9worker進(jìn)程,也不會(huì)產(chǎn)生反復(fù)fork反復(fù)kill的死循環(huán)。

年代過(guò)于久遠(yuǎn),無(wú)法發(fā)表回答
??