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