一次解決問題的經過

2021-08-02 08:36:55 字數 1719 閱讀 2795

問題處理經過:

tcaplus 出現的乙個奇怪的問題, 現象描述如下:

從不知道哪一天開始, 公升級的時候全部掛起, restore 事務全部掛起, 重啟任何程序都掛起. 找來一幫大神幫忙看, 發現tcapsvr 啟動的時候, 被卡住了30秒, tcm 是發出啟動命令後5秒檢查程序是否啟動, 這時就會報啟動失敗. 如果去看tcapsvr 程序, 30秒之後就會正常執行.

後來發現如果在重啟之前, 先把機器上的tagent 重啟一遍, 就可避免這個現象.

tcapsvr 啟動的時候會做一件事情, 去繫結tbus 通道, 這個時間等待30秒, 說明tbus 通道被鎖了30秒. 那麼誰會去鎖tbus 呢? 大神們經過研究, 寫了乙個工具, 可以把tbus 鎖列印出來, 如果是寫鎖會列印出加鎖的程序. 跑了工具後發現程序id 是0, 也就是說這個是個讀鎖. tbus 一直被讀鎖占用, 啟動任何程序的時候都要等30秒才會強制釋放讀鎖, 也就造成了事務掛起.

接下來要做的就是去查這個讀鎖是誰加上的. 我們目前觀察到的現象是重啟tagent 釋放鎖之後, 過幾天這個鎖又加上了. 具體多久不清楚. 所以老大們決定先釋放所有的鎖, 然後讓我加上監控, 每分鐘去檢查一次加鎖的時間, 找到就告警. 於是昨天下午分3批把飛機大戰的機器做了監控. 有的重啟tagent, 有的全部重啟, 有的刪除共享記憶體重啟. 今天早上收到一堆告警, 三批機器基本上同時出現了讀鎖. 然後查了一下時間, 發現都是10:01~10:18 分加上的. 這就說明是這段時間做了什麼事情, 導致加鎖.

alex 有句話, 叫做」隨便看看, 不一定能看出什麼」. 秉承著這樣的精神, 我就開始猜是什麼事情導致的. 開始我覺得可能是tcm 會不會每天早上10 搞什麼事情, 但是這個猜測不好入手去查. 正迷惘間, 俊峰說」去看看history 或者事務」, 我就敲了history 查了10點多那段時間的所有命令, 果然在滿屏的命令中, 找到了一行 tbusmgr -l | head 這句話, 時間剛好跟加鎖的時間對上. 基本上**不離十了.

從tbusmgr 的**裡面看, 邏輯很簡單: 加鎖 -> print 一堆變數 -> 釋放鎖. 這麼簡單的邏輯不可能會有問題, 除非異常中斷. flyma 到我位子上來gdb 看了一圈, 感覺不可能啊. 因為帶管道符, gdb 沒法斷點, 所以沒查出來什麼原因. 不過思路基本上成型了, 一定是在print 的時候異常中斷了, 導致後面釋放鎖的**沒有走到. 於是flyma 執行了一條命令: 「strace -o output /usr/local/tsf4g_release/tools/tbusmgr -k 2088 -l | head」, 把要執行的命令strace 打出來, 然後看output 檔案最後赫然寫著:

write(1, 「etime – n/a\nchannel 16 informat」…, 4096) = -1 epipe (broken pipe)

— sigpipe (broken pipe) @ 0 (0) —

+++ killed by sigpipe +++

程序被管道殺掉了!!! flyma 看了一臉懵逼.

原因找到就好, 一方面tbusmgr 的工具要加上防禦性**, 防止管道殺掉程序. 一方面運維方面以後不要用 「tbusmgr -l | head」, 防止把tbus 通道鎖上.

最後我們來學習一下linux 程式開發的一些工具,

找到原因後我們常常說:」原來這麼簡單」. 但是找原因的過程卻很迷茫, 常常無從下手, 只能靠猜. 但是這個時候一定要堅持去猜, 去驗證, 最後才能找出原因

最後說下怎麼看乙個多執行緒的程序怎樣檢視各個子執行緒id

一次解決IDEA所有 中文亂碼問題

中文亂碼問題分類 編碼普通中文亂碼 properties檔案中文亂碼 console控制台中文亂碼 搜尋框中文亂碼 svn注釋中文亂碼 問題截圖 2 properties檔案中文亂碼 4,搜尋框中文亂碼 5 svn注釋中文亂碼 解決方法 1 編碼普通中文亂碼 settings editor code...

記錄一次解決VScode字型問題經歷

vscode介面的預設設定不會全部在配置檔案中體現,如需修改,需先新增要修改的字段,再輸入要修改的值,比如此次修改字型,需要在配置檔案中手動加入 editor.fontfamily 字段,如果需要對單個工程進行修改,需要修改工程內.vscode裡的配置檔案settings.json,而如果需要更改乙...

記一次解決MQ不消費問題

mq不消費,mq執行緒全部處於等待狀態 專案重啟之後問題解決 jvm記憶體狀態正常 fullgc時間持續加長 cpu 100 查詢專案程序中所有的執行緒資訊,檢視是否有死鎖 檢視例項程序 tomcat的話bootstrap那個就是,springboot專案看啟動類名 jps 檢視程序狀態 產看是否有...