21號開始突然發(fā)現(xiàn),項目出現(xiàn)大量事務(wù)超時鎖住(業(yè)務(wù)沒有激增,服務(wù)器、數(shù)據(jù)庫負載都不高),剛開始只是高并發(fā)接口有個更新read_log表的業(yè)務(wù)有超時鎖住的情況(該表也確實大,幾千萬的量), 我試著把高并發(fā)接口更新操作暫時停止了,不再更新read_log表,但是,大概過個幾分鐘,整個項目所有其他涉及到更新數(shù)據(jù)庫表操作的接口也都出現(xiàn)事務(wù)超時鎖住的情況,哪怕是最簡單的登錄接口(登錄用戶更新下用戶登錄時間)。
我現(xiàn)在完全是蒙,不知道從哪里下手來解決,如果是單個接口,我試著改改還行,現(xiàn)在整個項目所有涉及到更新操作的接口都有.....就覺似乎不是業(yè)務(wù)代碼的問題
webman重啟可以短暫恢復(fù)下,幾分鐘后又會大面積事務(wù)超時......
數(shù)據(jù)庫買的阿里云的高可用數(shù)據(jù)庫, 問了阿里云客服,客服只說是業(yè)務(wù)代碼問題,白問......
希望大神可以幫忙提供下,解決這類問題的思路,哪些地方可能出問題,從哪里去分析下問題
應(yīng)該是有控制器沒提交事務(wù)導(dǎo)致的,安裝 webman/log 會自動記錄并回滾沒提交的事務(wù),能夠防止事務(wù)死鎖,也方便你們排查問題
composer requrie webman/log
記得restart重啟
從描述上看就是有代碼沒提交事務(wù)導(dǎo)致的。
進入到webman目錄,執(zhí)行 grep Uncommited ./runtime/logs -Rn
或者 grep transaction ./runtime/logs -Rn
如果確實都沒有,可能是業(yè)務(wù)bug被你們修復(fù)了。
既然問題是21號開始的,看下那幾天提交了哪些代碼做了哪些操作。
基本上面說的情況,我補充一下:
1.在進一步可能就是死循環(huán),導(dǎo)致進程堵塞了
2.看workerman.log,里面應(yīng)該會有進程退出的日志,可以吧那個時間段的日志發(fā)出來