程式日誌停止滾動問題排查

2021-10-11 18:45:11 字數 1421 閱讀 7830

今天在做定時任務的時候,遇到了乙個比較難搞的問題,這個問題也比較有意思,現在給大家分享一下,這個定時任務的呼叫入口是這樣的。

// 進行 ldap同步

public void runldapsyncjob() catch (exception e)

}這個方法ldapsyncservice.syncldap()向外丟擲異常,這個方法內部會呼叫另乙個方法

/** * 建立部門目錄並返回部門cn

* @param departmentdtomap

* @param targetdepartid

* @param rootcn

* @return

* @throws exception

*/public string creatstaffdepartcn(mapdepartmentdtomap ,long targetdepartid,string rootcn, setldapduset ) throws exception {}

但是傳入的引數中,第二個引數傳入的是long型別,而且是null,一開始沒排查出來,因為一直加日誌,在呼叫處,資料返回處,資料驗證處都加日誌了,但是通過定時任務管理平台執行任務之後方法執行到一定行數就什麼也沒有了,也沒有日誌,懷疑是可能有死迴圈(程式裡寫了while)結果top一下,發現cpu,記憶體都很正常,結合之前遇到的這種情況也看了下這個定時任務的程序中線程狀態,看看有沒有blocked或者死鎖(單執行緒操作應該不會有死鎖),發現也沒有。

這就尷尬了,於是想到了可能異常被框架或者jvm吃掉了,於是在上面兩個方法裡都加了try,catch

ldapsyncservice.syncldap() throws exceptioncatch(exception e)

}creatstaffdepartcn() throws exceptioncatch(exception e)

}再次部署執行之後發現確實有異常了,然後丟擲了空指標,這裡我恍然大悟,因為creatstaffdepartcn這個方法的第二個入參確實沒有值傳進去的。然後懷疑是否是因為自動裝箱和拆箱過程中即使出現異常也會被jvm吃掉。本地簡單寫了乙個demo,執行發現會報空指標。

這裡沒有列印異常我判斷有下面幾種可能

1.定時任務框架沒有幫忙丟擲。

2.最外層的try,catch沒有生效

3.jvm把異常吃掉了

下面總結一下遇到程式日誌停止滾動之後我們可以做的一些操作

1.top看是否由於fgc等問題導致的服務停止響應

2.jstack -l pid看一下程序內線程是否大量有blocked狀態的執行緒

3.在日誌停止滾動的**上下文增加try,catch語句嘗試捕獲異常。

本文由部落格一文多發平台 openwrite 發布!

架構設計@工程設計@服務穩定性之路

mui table view 滾動問題

場景 手機端 頁面部分區域 這裡假設高度為500px 起初我採取的解決方案 css overflow hidden auto postion fixed z index 999我用chrome 測試 好使,但是到了真機測試環節就不好使了,後來 firefox 測試發現全域性滾動條蓋住 當前滾動條 試...

ScrollViewer的滾動問題

在c 中,兩個 scrollviewer 巢狀在一起或者 scrollviewer 裡面巢狀乙個 listbox listview 控制項本身有scrollviewer 的時候,我們本想要的效果是滑鼠滾動整個 scrollviewer的內容 但你會發現實際結果和你想像的不一樣,內部有scrollvi...

浮層滾動問題

使用positiontransform實現從右邊滑出的 h5 浮層效果,但在手機瀏覽器上左右滑動時,頁面產生了左右滾動條,浮層也出來了。這是問題頁面,移動端訪問如下 這個現象不應該出現,問題好解決,但為什麼會這樣?想了一下,好像知道相關點,但又講不清,所以在此梳理一下。產生了滾動,很自然的就會想到o...