故障描述:
線上的job正常跑一段時間後就進入了blocked狀態,更新quartz版本仍無法解決
故障分析:
先說正常獲取、觸發任務執行的流程:
排程器執行緒執行的時候,首先從 triggers 表獲取狀態為 waiting 的將要發射的觸發器,然後條件更新狀態 trigger_state 的值為 acquired ,更新成功則表示搶占到了,否則可能是被其他排程器搶占。然後插入觸發器資訊及例項名到 fired_triggers 表。前面的更新與插入操作是在同乙個事務裡完成。
搶占到觸發器後,排程器執行緒等待觸發時間到來。
執行時間到來後,排程器執行緒首先會把 fired_triggers 表裡觸發器記錄的狀態更新為 executing ,如果任務允許併發執行,把 triggers 表裡的狀態更新為 waiting , paused 或 complete (不需要再執行的) ;如果任務不允許併發執行,還會把 triggers 表裡的狀態更新為 blocked 或 paused_blocked,這個更新是根據 任務名和任務所屬組名 而不是觸發器名稱和觸發器所屬組名 來更新的,這就解決了乙個任務有多個觸發器的併發問題;然後排程器執行緒會建立乙個執行環境來執行任務,以便在任務執行完成後更新觸發器的狀態。任務執行完成後,在乙個事務裡把 triggers 裡的觸發器狀態更新為 waiting,刪除 fired_triggers 表裡對應的記錄。
即狀態變化為:waiting->blocked->executing->waiting
分析線上job得出blocked原因:
1、job執行執行緒執行週期過長,下乙個執行任務週期到了,導致blocked。一般是業務過多或者http請求未設定超時時長
2、異常處理,導致一直失敗重試,可能導致blocked**如下
@override
protected void executeinternal(jobexecutioncontext jobexecutioncontext) throws jobexecutionexception ....", jobexecutioncontext.gettrigger().getkey());
try catch (exception e)
}
如果runjob方法一直異常,這會一直throw exception,導致blocked。
解決方法:
一、控制job執行不會重疊,保證每個執行週期不會重疊。
1)、如果處理業務很多,可以用多執行緒的方式,並行處理,縮短執行時長。
2)、配置cron 表示式要注意避免執行週期交叉。
3)、如果使用http或者其他遠端呼叫的方法,一定要設定超時時長
二、異常一定要控制重試次數,**如下
@override
protected void executeinternal(jobexecutioncontext jobexecutioncontext) throws jobexecutionexception ....", jobexecutioncontext.gettrigger().getkey());
try catch (exception e) exception, setrefireimmediately true", jobexecutioncontext.gettrigger().getkey());
integer result = (integer) jobexecutioncontext.get("result");
if (result == null || result < cronconfig.getretrycount())
}}
線上操作與線上問題排查實戰
一 了解機器連線數情況 問題 192.168.88.136的sshd的監聽埠是22,如何統計192.168.88.136的sshd服務各種連線狀態 time wait close wait established 的連線數。netstat an grep 192.168.88.136 22 awk ...
線上操作與線上問題排查實戰
一 了解機器連線數情況 問題 192.168.88.136的sshd的監聽埠是22,如何統計192.168.88.136的sshd服務各種連線狀態 time wait close wait established 的連線數。netstat an grep 192.168.88.136 22 awk ...
線上操作與線上問題排查實戰
問題 1.2.3.4的sshd的監聽埠是22,如何統計1.2.3.4的sshd伺服器各種連線狀態 time time wait close wait estestablestablishestablished 連線數。說明 netstat是追查網路連線問題的常用工具,結合grep awk使用。說明 ...