如果你的項目重啟數(shù)據(jù)庫連接數(shù)突增盖淡!連接數(shù)據(jù)庫超時年柠!請收下這個方子

結(jié)論:

數(shù)據(jù)庫連接數(shù)突增是數(shù)據(jù)庫連接資源沒有及時釋放。

連接數(shù)據(jù)庫超時是因為數(shù)據(jù)庫連接資源釋放的過早褪迟。

現(xiàn)象1:每次上線項目DB的連接數(shù)會突增冗恨。

?

原因:是項目關(guān)閉的時候沒有釋放連接資源導(dǎo)致。

DB的connection資源沒有正常釋放味赃,導(dǎo)致項目啟動的時候再次創(chuàng)建數(shù)據(jù)庫連接資源掀抹,就出現(xiàn)了連接數(shù)突增的現(xiàn)象。一段時間后mysql根據(jù)wait_time的配置心俗,自動回收conncetion傲武,所以連接數(shù)又回落回來。

如果是是DB的connection資源沒有正常釋放城榛,最可能的是在項目關(guān)閉的時候沒有釋放掉DB的連接資源揪利。

經(jīng)過在查看線上jekins的上線腳本后,發(fā)現(xiàn)線上停止項目使用的kill進(jìn)程的方式來停止項目狠持。那么就證明假設(shè)都成立了疟位。接下來解決問題環(huán)節(jié)(程序員們喜聞樂見的百度和谷歌環(huán)節(jié)了)。

解決方案

1.主動釋放

項目關(guān)閉使用正確的stop命令喘垂,保證項目能正確的釋放掉各種資源献汗。

執(zhí)行命令:xxxx_tomcat.stop

2.被動釋放

現(xiàn)象2:連接數(shù)據(jù)庫超時。

com.mysql.jdbc.CommunicationsException: The last packet successfully received from the server was58129 seconds ago.The last packet sent successfully to the server was58129seconds ago, which is longer than the server configured value of'wait_timeout'. You should consider either expiring and/or testing connection validity before use in your application, increasing the server configured valuesforclient timeouts, or using the Connector/J connection property'autoReconnect=true'to avoidthisproblem. mysql

問題原因 :連接池里的connection資源mysql主動提前釋放導(dǎo)致王污。

原因是在datasource連接池中配置的最大空閑時間到達(dá)之前(比如maxIdleTime罢吃,不通數(shù)據(jù)源配置名不一樣),已經(jīng)到達(dá)mysql的wait_timeout(最大空閑時間)昭齐,是mysql主動把connection資源回收尿招。但是項目中的連接池還持有connection,所以當(dāng)項目中使用connection的時候會報CommunicationsException錯誤阱驾。

解決方案

1.修改mysql的wait_time,interactive_timeout把值調(diào)大(不建議如果太大就谜,可能導(dǎo)致連接數(shù)較多,引起性能下降)

2.配置JDBC的重連機(jī)制autoReconnect(不建議里覆,只有4.x版本丧荐,起作用)

jdbc:mysql://localhost:3306/test?user=root&password=&autoReconnect=true

3.減少連接池內(nèi)的存活時間+JDBC探活(建議,搭配使用效果好)


最大閑置資源時間的配置

兩個現(xiàn)象的解決方案都指向了同一個配置就是connection的最大閑置資源時間喧枷。

?

有兩個地方可以配置最大閑置資源時間:

1.在項目的連接池中配置虹统,比如maxIdleTime弓坞。

2.在mysql中也可以配置,interactive_timeout和wait_timeout车荔。

三渡冻、MySql中的connection超時配置

mysql的配置中有interactive_timeout和wait_timeout兩個參數(shù),這兩個參數(shù)有時候還存在覆蓋的關(guān)系忧便,所以還是給大伙說清楚一點兩個的區(qū)別和聯(lián)系方便大家理解族吻。

建議interactive_timeout和wait_timeout參數(shù)值配置成一樣的。

1.interactive_timeout和wait_timeout概念

mysql的連接超時時間配置

wait_timeout非交互式連接超時通過jdbc連接數(shù)據(jù)庫是非交互式連接珠增,最大閑置時間用于規(guī)定一個connection最大的空閑時間超歌,默認(rèn)是28800秒,超時MySQL會自動回收該connection蒂教。

interactive_timeout交互式連接超時通過mysql客戶端連接數(shù)據(jù)庫是交互式連接握础,最大閑置時間用于規(guī)定一個connection最大的空閑時間,默認(rèn)是28800秒悴品,超時MySQL會自動回收該connection禀综。

2.修改配置參數(shù)的方式

1.修改配置文件my.ini

2.執(zhí)行mysql命令

#修改global級別的配置

set global interactive_timeout = 10;

set global wait_timeout = 10;

#修改session級別的配置

set session ?interactive_timeout=20;

set session ?wait_timeout=20;

3.查看參數(shù)配置

mysql> show variables like '%timeout%';

+-----------------------------+----------+

| Variable_name? ? ? ? ? ? ? | Value? ? |

+-----------------------------+----------+

| connect_timeout? ? ? ? ? ? | 10? ? ? |

| delayed_insert_timeout? ? ? | 300? ? ? |

| have_statement_timeout? ? ? | YES? ? ? |

| innodb_flush_log_at_timeout | 1? ? ? ? |

| innodb_lock_wait_timeout? ? | 50? ? ? |

| innodb_rollback_on_timeout? | OFF? ? ? |

| interactive_timeout? ? ? ? | 28800? ? |

| lock_wait_timeout? ? ? ? ? | 31536000 |

| net_read_timeout? ? ? ? ? ? | 30? ? ? |

| net_write_timeout? ? ? ? ? | 60? ? ? |

| rpl_stop_slave_timeout? ? ? | 31536000 |

| slave_net_timeout? ? ? ? ? | 60? ? ? |

| wait_timeout? ? ? ? ? ? ? ? | 28800? ? |

+-----------------------------+----------+

13 rows in set (0.00 sec)

3.參數(shù)不同的繼承關(guān)系

1.interactive_timeout和wait_timeout配置最終生效都是作用在session交互的時候生效。

2.控制最大空閑時間的參數(shù)是wait_timeout在起作用苔严。不管是非交互式還是交互式連接定枷,都是wait_timeout起作用

3.交互式連接下的wait_timeout和interactive_timeout配置都會繼承自全局的interactive_timeout參數(shù)。


1.wait_timeout決定連接超時時間的演示

因為我們是用mysql客戶端連接届氢,應(yīng)該是交互式連接欠窒,連接超時起作用的應(yīng)該是interactive_timeout參數(shù),但是真是的這樣嗎退子。

確認(rèn)設(shè)置連接空閑超時時間是WAIT_TIMEOUT

============= wait_timeout ================

mysql> set session WAIT_TIMEOUT=2;

Query OK, 0 rows affected (0.00 sec)

等待2秒再次查詢岖妄,連接已經(jīng)丟失,說明配置生效寂祥。

mysql> select 1;

ERROR 2006 (HY000): MySQL server has gone away

No connection. Trying to reconnect...

Connection id:? ? 50

Current database: *** NONE ***

+---+

| 1 |

+---+

| 1 |

+---+

1 row in set (0.00 sec)

============= interactive_timeout ================

mysql> set session? interactive_timeout=2;

Query OK, 0 rows affected (0.00 sec)

等待2秒再次查詢荐虐,連接也沒有丟失,說明配置未生效丸凭。

mysql> select 1;

+---+

| 1 |

+---+

| 1 |

+---+

1 row in set (0.00 sec)

2.interactive_timeout不同的繼承演示

設(shè)置interactive_timeout的配置

mysql> set global interactive_timeout=10;

Query OK, 0 rows affected (0.00 sec)

mysql> select variable_name,variable_value from information_schema.global_variables where variable_name in ('interactive_timeout','wait_timeout');

+---------------------+----------------+

| variable_name? ? ? | variable_value |

+---------------------+----------------+

| INTERACTIVE_TIMEOUT | 10? ? ? ? ? ? |

| WAIT_TIMEOUT? ? ? ? | 28800? ? ? ? ? |

+---------------------+----------------+

2 rows in set, 1 warning (0.00 sec)

新開一個窗口(交互式連接)查看福扬,wait_timeout?和?interactive_timeout 都繼承自global的interactive_timeout

交互式連接下可以看到interactive_timeout和wait_timeout都繼承自全局INTERACTIVE_TIMEOUT

mysql> select variable_name,variable_value from information_schema.session_variables where variable_name in ('interactive_timeout','wait_timeout');

+---------------------+----------------+

| variable_name? ? ? | variable_value |

+---------------------+----------------+

| INTERACTIVE_TIMEOUT | 10? ? ? ? ? ? |

| WAIT_TIMEOUT? ? ? ? | 10? ? ? ? ? ? |

+---------------------+----------------+

2 rows in set, 1 warning (0.00 sec)

使用JDBC查詢(非交互式)查看,wait_timeout繼承自全局wait_timeout惜犀,interactive_timeout繼承自全局interactive_timeout

Class.forName("com.mysql.jdbc.Driver");Connection connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/deeluma_01","root","root");Statement statement = connection.createStatement();ResultSet resultSet = statement.executeQuery("select variable_name,variable_value from information_schema.session_variables where variable_name in ('interactive_timeout','wait_timeout')");while(resultSet.next()){String variable_name = resultSet.getString("variable_name");intvariable_value = resultSet.getInt("variable_value");System.out.println(variable_name+":"+variable_value);}//非交互式下查看铛碑,wait_timeout繼承自全局wait_timeout,interactive_timeout繼承自全局interactive_timeout//===============//INTERACTIVE_TIMEOUT:10WAIT_TIMEOUT:28800

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末虽界,一起剝皮案震驚了整個濱河市汽烦,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌莉御,老刑警劉巖撇吞,帶你破解...
    沈念sama閱讀 222,681評論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件俗冻,死亡現(xiàn)場離奇詭異,居然都是意外死亡梢夯,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,205評論 3 399
  • 文/潘曉璐 我一進(jìn)店門晴圾,熙熙樓的掌柜王于貴愁眉苦臉地迎上來颂砸,“玉大人,你說我怎么就攤上這事死姚∪伺遥” “怎么了?”我有些...
    開封第一講書人閱讀 169,421評論 0 362
  • 文/不壞的土叔 我叫張陵都毒,是天一觀的道長色罚。 經(jīng)常有香客問我,道長账劲,這世上最難降的妖魔是什么戳护? 我笑而不...
    開封第一講書人閱讀 60,114評論 1 300
  • 正文 為了忘掉前任,我火速辦了婚禮瀑焦,結(jié)果婚禮上腌且,老公的妹妹穿的比我還像新娘。我一直安慰自己榛瓮,他們只是感情好铺董,可當(dāng)我...
    茶點故事閱讀 69,116評論 6 398
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著禀晓,像睡著了一般精续。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上粹懒,一...
    開封第一講書人閱讀 52,713評論 1 312
  • 那天重付,我揣著相機(jī)與錄音,去河邊找鬼凫乖。 笑死堪夭,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的拣凹。 我是一名探鬼主播森爽,決...
    沈念sama閱讀 41,170評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼嚣镜!你這毒婦竟也來了爬迟?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 40,116評論 0 277
  • 序言:老撾萬榮一對情侶失蹤菊匿,失蹤者是張志新(化名)和其女友劉穎付呕,沒想到半個月后计福,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,651評論 1 320
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡徽职,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,714評論 3 342
  • 正文 我和宋清朗相戀三年象颖,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片姆钉。...
    茶點故事閱讀 40,865評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡说订,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出潮瓶,到底是詐尸還是另有隱情陶冷,我是刑警寧澤,帶...
    沈念sama閱讀 36,527評論 5 351
  • 正文 年R本政府宣布毯辅,位于F島的核電站埂伦,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏思恐。R本人自食惡果不足惜沾谜,卻給世界環(huán)境...
    茶點故事閱讀 42,211評論 3 336
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望胀莹。 院中可真熱鬧类早,春花似錦、人聲如沸嗜逻。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,699評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽栈顷。三九已至逆日,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間萄凤,已是汗流浹背室抽。 一陣腳步聲響...
    開封第一講書人閱讀 33,814評論 1 274
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留靡努,地道東北人坪圾。 一個月前我還...
    沈念sama閱讀 49,299評論 3 379
  • 正文 我出身青樓,卻偏偏與公主長得像惑朦,于是被迫代替她去往敵國和親兽泄。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,870評論 2 361

推薦閱讀更多精彩內(nèi)容