日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 综合教程 >内容正文

综合教程

定时任务卡死问题排查

發布時間:2023/12/13 综合教程 34 生活家
生活随笔 收集整理的這篇文章主要介紹了 定时任务卡死问题排查 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

背景描述:使用quartz建立多個定時任務,每5分鐘執行一次。定時任務中包含httpclient的網絡訪問,及druid的數據庫訪問。執行一段時間后不定期(可能10天半個月,可能好幾個月)卡死。
表現狀況為:

日志到某個時間點突然沒有輸出了,也沒有異常日志記錄,排除當時磁盤空間不足的問題

httpclient使用的4.3版本,出問題的生成環境下已在request中設置3種超時時間。實際測試中除了setConnectTimeout與setConnectionRequestTimeout即使不設置,程序也會拋出超時異常。只有當setSocketTimeout不設置的時候,程序會出現日志不打印一直卡死的狀況,但與我要解決的問題來看還是有略微區別。當時的內存狀況不一致。(圖1為生產環境上卡死時的內存,圖2為本機測試時,故意不設置setSocketTimeout超時情況下的內存圖 )
(圖1)(圖2)

生成環境下設置了數據庫超時,本機測試時暫時還沒有測試數據庫超時的情況。

下次生成環境上再發生此類狀況的排查步驟:

本機打開jdk安裝目錄下的visualVM查看線程執行情況,正常定時任務執行時線程應該是如下圖的少量runnalbe,如圖1所示,但是本機測試時,故意讓服務器端下斷點不返回信息,在客戶端的httpclient中不設置setConnectTimeout超時時間,最終顯示的線程圖樣是一直runnalbe的,因此下次在生產環境下出現這個問題時,可以查看線程中,該線程是否一直是runnalbe狀態如圖2所示
(圖1) (圖2)
使用jstack查看當時的業務定時任務線程中具體代碼。打開步驟,找到程序對應的pid,然后使用命令jstack 程序pid的方式查看線程狀態(圖1)。 使用jstack的原因是這個可以看到具體代碼,如圖2
(圖1)(圖2)

今天又發生了一次,排查懷疑是數據庫連接未釋放造成的。


(發生問題的機器上,線程圖。從中可以看到執行定時job的線程pool-3-thread-1一直在運行,類似于之前在本地機器上模擬的httpclient未設置響應時間的狀態)


(發生問題的機器上,內存圖)


總結

以上是生活随笔為你收集整理的定时任务卡死问题排查的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。