記一次專案的死鎖分析

2021-09-29 14:25:48 字數 911 閱讀 6415

公司專案使用多執行緒開發,因此使用gdb exec -c corefile執行core檔案後,使用bt列印堆疊資訊 看不出問題,需要進入到執行緒內部分析。

1. info threads 列印執行緒資訊

可以看到有多個__lll_lock_wait () , 看到這裡,我們推測可能是鎖出現問題了。那麼繼續往,進入到執行緒內部,隨便找乙個是__lll_lock_wait ()狀態的,使用thread(縮寫 t)t 639 ,在使用bt檢視堆疊

使用frame(錯寫 f) f 3進入到函式內部,列印函式內部的變數檢視是哪個鎖被哪個執行緒鎖住了

可以看到 guserstateinfolock 被執行緒19204 鎖住了。在info thread 列印的執行緒資訊可以看到19204 對應的執行緒號是566,進入到 566 執行緒內部 t 566,該執行緒占用了 guserstateinfolock

在findcorpinfonodebyphonenu 內部,請求使用g_xmlcorpinfolistlock 鎖,該鎖被 t 14 占用

t 14 執行緒占用了g_xmlcorpinfolistlock ,同時又在等待 guserstateinfolock,

而guserstateinfolock 被19024 這個程式,因此可以斷定是發生死鎖了。

使用了四種解決死鎖方式裡其中的一種,就是保持枷鎖順序的一致性。執行緒1使用鎖1,和鎖2的順序,那麼執行緒2也應該使用鎖1和鎖2 的順序

mvc 記一次「專案」的歷程

大二上半學期因為選修課的原因,答應幫老師完善學院的選課系統。在這之前沒有做過乙個可以成為 專案 的專案,本著挑戰自己的原則和可以不上選修課的福利,斷斷續續用了一學期的時間來完善這個選課系統。接受這個專案的時候,專案已經被乙個學姐做的差不多了,基本框架模型都有了。值得一提的是,學姐是現學現做,用的是我...

記一次mysql死鎖問題

場景 innodb下不同的事務進行更新和插入操作導致資料庫死鎖,如下,在批量插入之前,進行了邏輯刪除操作,這段 在併發情況下出現死鎖 堆疊異常 deadlock found when trying to get lock try restarting transaction 更新操作sql 批量插入...

記一次現場部署專案的經歷

給伺服器分盤 右擊計算機 管理 儲存 磁碟管理,按需求分配合適的磁碟空間 根據公司建立文件,命名規範,分別建立資料庫資料夾,應用資料夾等等 搭建環境,jdk1.8,tomcat7,oracle11,plsql等 匯入備份資料庫檔案到資料庫伺服器.匯入語句 impdp userid 物件名稱 物件密碼...