給客戶開發(fā)了一個應(yīng)用系統(tǒng),基于tomcat,用java開發(fā)的,采用前后端分離技術(shù)。系統(tǒng)使用一段時間之后,用戶報錯說,導入excel數(shù)據(jù)的時候,報錯,導致后續(xù)操作都無法進行,需要重新啟動系統(tǒng)才能夠恢復正常。
經(jīng)過開發(fā)人員在測試環(huán)境分析,重新導入這個excel文件,系統(tǒng)是正常的,沒有出現(xiàn)異常。
我們猜想可能的問題:1)java導入程序出錯,導致系統(tǒng)異常;2)數(shù)據(jù)庫sql預計執(zhí)行太慢,導致死鎖。
于是上慢sql來查看數(shù)據(jù)庫,沒有發(fā)現(xiàn)執(zhí)行緩慢的sql語句。
重新測試導入程序,沒有發(fā)現(xiàn)錯誤。
是否是一個累積錯誤?
于是,模擬大量的操作,一段時間后,再導入excel文件,報錯,提示是mysql數(shù)據(jù)庫的連接數(shù)滿了。
跟著這個問題去排查程序,沒有發(fā)現(xiàn)程序異常錯誤。
猜想是,某個非常特定的分支,忘記了歸還給數(shù)據(jù)庫連接池那個連接。當多次偶然進入這個使用場景,每次都會占用一個連接,等到所有的連接都被占用,就會報這個錯誤。
如何解決?
第一, 排查程序,看是否存在沒有“歸還”給連接池,連接的問題。
第二, 設(shè)置數(shù)據(jù)庫連接池的參數(shù),當一個請求響應(yīng)時間過長,就強制回收這個連接。
通過上述兩個方法,解決了這個問題。
推薦閱讀:
本文內(nèi)容不用于商業(yè)目的,如涉及知識產(chǎn)權(quán)問題,請權(quán)利人聯(lián)系SPASVO小編(021-60725088-8054),我們將立即處理,馬上刪除。