您好,登錄后才能下訂單哦!
背景:
熱升級是什么呢?了解nginx的同學都知道,nginx是支持熱升級的,可以用老進程服務先前鏈接的鏈接,使用新進程服務新的鏈接,即在不停止服務的情況下完成系統(tǒng)的升級與運行參數(shù)修改。
環(huán)境:
原因:
沿著beego官方文檔開啟Graceful后, 運行kill -HUP pid重啟進程的時候, 舊連接其實并沒有繼續(xù)處理, 而是直接關閉了隨著舊進程,導致請求返回504。
解決:
看了代碼是在grace/server.go中process.Kill()的時候把新進程的父進程直接殺死, 發(fā)送的是SIGKILL信號,進程不會處理,直接被殺死,其實在handleSignals函數(shù)里面也確實沒有處理這種信號。所以,代碼改為如下:
文件:grace/server.go, 函數(shù)ListenAndServe()以及 ListenAndServeTLS()
//err = process.Kill()
err = process.Signal(os.Interrupt)
最后:
經(jīng)過測試可以正常處理完未完成的連接。
以需求驅(qū)動技術,技術本身沒有優(yōu)略之分,只有業(yè)務之分。
免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權內(nèi)容。