昨天提到了WebSphere實用的threadMonitor功能,
預設條件下,threadMonitor會每3分鐘檢查一次有沒有停住超過10分鐘的thread。
在這樣的條件下,假如我們上了一支很有問題的程式,會有一定的機率造成lock,
可是又都剛好在還不到10分鐘就解掉lock了,那我們發現這個問題的機會就降低了不少。
為了避免這樣的情形,我們可以透過console調整設定,將hang的定義調整為更短的時間。
左側選單 > Servers > Server Types > WebSphere application servers > server1
進入server1頁面後,
點擊右側Server Infrastructure >Administration > Custom properties
按下New...新增設定
Name:
com.ibm.websphere.threadmonitor.threshold
Value:
60
設定只要thread停止超過60秒,就視為hang
Name:
com.ibm.websphere.threadmonitor.interval
Value:
60
設定threadMonitor每60秒就檢查一次thread的運作狀況
之後按下save儲存並重啟server以生效
接著我再試試將製造hang thread的情境,
這次我把sleep的秒數設定為90秒,看看會不會被偵測到
試了幾次才成功,可能是因為threadMonitor偵測時thread剛好還沒停止滿60秒的緣故。
如果要提升精準度,或許可以再將threadMonitor偵測的秒數再調短吧。
大家也可以依自己的需求來調整秒數,不過也要注意,偵測太頻繁的話也可能造成效能上的負擔。
另外還有偵測到hang時自動生成java core的設定也很實用,
可參考IBM官方文件:https://www.ibm.com/docs/en/was-nd/8.5.5?topic=support-configuring-hang-detection-policy