背景:
最近這段時間(其實持續了1個月),在線上監控的自動化執行過程中,會偶現jenkins執行任務時502卡住,阻塞其他任務。
最初的原因以為是我的代碼有問題,或者執行的接口返回超時導致的。
后來在代碼里加了異常捕獲、查看對應時間對應接口的服務端日志,都沒有找到原因。
后來找運維同學幫助,修改了配置之后,得到解決。
“在瀏覽器和jenkins之間有一個nginx反向代理,負責把流量轉發到jenkins上。nginx所在主機上啟用了連接追蹤功能,這個負責記錄代理前后的連接的對應關系,記錄內容被放到一個哈希表中。由於nginx要代理的域名有點多,而哈希表容量有限,所以容量滿了內核就開始丟包,nginx發送不了請求或者收不到響應就報502、504,等表記錄超時時間過了之后,哈希表又空閑了,故障就解除了,所以構建結果時好時壞。解決方案就是把這台主機上的這個哈希表的容量調大一些。”
“由於nginx代理偶發連接丟失問題,每次執行任務所啟動的進程與jenkins自身有通信故障,導致任務無法在有限時間內結束。”
