有人在群里喊數(shù)據(jù)庫(kù)鏈接數(shù)不夠了,要調(diào)大,聽上去不怎么靠譜,跟進(jìn)了一下。
- A: 是xxx數(shù)據(jù)庫(kù)嗎?
- B: 是mysql數(shù)據(jù)庫(kù)
- A: 用xxx管理連接嗎?
- B: 不是
- A: 前面討論close wait是tcp狀態(tài)嗎?
- B: 是
- A: tcp狀態(tài)在db端看到還是應(yīng)用服務(wù)器?
- B: 應(yīng)用服務(wù)器。
- A: 那應(yīng)該是mysql主動(dòng)關(guān)閉呀
- A: 應(yīng)用服務(wù)器看到的tcp連接是來自客戶端還是到db的?
- B: 來自客戶端
- A: 哦,應(yīng)該是客戶端主動(dòng)關(guān)閉。原因可能是應(yīng)用服務(wù)器超時(shí)沒響應(yīng),超時(shí)原因有很多,可能是應(yīng)用服務(wù)器線程被阻塞,阻塞一般都是在等待資源,資源可能是一把鎖、一個(gè)數(shù)據(jù)庫(kù)鏈接或其他。超時(shí)還可能是應(yīng)用服務(wù)器處理速度變慢,處理速度慢也是資源緊張,資源可能是內(nèi)存、CPU、外部IO。
- B: 哦,看看吧,先賭一把數(shù)據(jù)庫(kù)鏈接不夠。
- A: 如果是數(shù)據(jù)庫(kù)鏈接,忘關(guān)的可能性大,或者死鎖。只調(diào)大還不行,要在連接池加上自動(dòng)釋放,鎖加上不等待。最終還是要排查真正原因,解決掉。
在這個(gè)處理過程中,A盡量做到思維嚴(yán)謹(jǐn),不過還有改進(jìn)空間。
- 這個(gè)問題可以改成開放式,“什么數(shù)據(jù)庫(kù)?"
- 同樣改成開放式,”用什么管理數(shù)據(jù)庫(kù)鏈接?“
- 這里思維跳了一下,前面并沒說tcp 鏈接是到mysql的
- 對(duì)連接池管理不是非常熟悉,沒法憑直接指引方向了。
總結(jié)下來,要像高手一樣灰飛煙滅間掃除問題,需要嚴(yán)謹(jǐn)?shù)倪壿嬐评?豐富實(shí)戰(zhàn)經(jīng)驗(yàn)培養(yǎng)的直覺。