日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關咨詢
選擇下列產(chǎn)品馬上在線溝通
服務時間:8:30-17:00
你可能遇到了下面的問題
關閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
線上MySQL不可用,報錯數(shù)據(jù)庫無法連接

ERROR 1040(HY000): Too many connections:DB連接池里已有太多連接,不能再和你建立新連接。

成都創(chuàng)新互聯(lián)服務項目包括商南網(wǎng)站建設、商南網(wǎng)站制作、商南網(wǎng)頁制作以及商南網(wǎng)絡營銷策劃等。多年來,我們專注于互聯(lián)網(wǎng)行業(yè),利用自身積累的技術優(yōu)勢、行業(yè)經(jīng)驗、深度合作伙伴關系等,向廣大中小型企業(yè)、政府機構等提供互聯(lián)網(wǎng)行業(yè)的解決方案,商南網(wǎng)站推廣取得了明顯的社會效益與經(jīng)濟效益。目前,我們服務的客戶以成都為中心已經(jīng)輻射到商南省份的部分城市,未來相信會繼續(xù)擴大服務區(qū)域并繼續(xù)獲得客戶的支持與信任!

數(shù)據(jù)庫自己有個連接池,你的每個系統(tǒng)部署在機器時,那臺機器上部署的系統(tǒng)實例/服務實例自己也有個連接池,你的系統(tǒng)每個連接Socket都對應DB連接池里的一個Socket連接,這就是TCP連接:

當MySQL告訴你Too many connections,就是在傳達它的連接池的連接已經(jīng)滿了,你這業(yè)務系統(tǒng)不能再和它建立新的連接。

案例

DB部署在64G內(nèi)存大機器,而連接這臺物理機的Java業(yè)務系統(tǒng)部署在2臺機器,Java系統(tǒng)的連接池最大大小為200,即每個Java業(yè)務系統(tǒng)節(jié)點,最多和MySQL建立200個連接,共最多建立400個連接。

但這時若MySQL報異常Too many Connections,說明目前MySQL無法建立400個網(wǎng)絡連接。這也太少了吧,這可是高配置機器!

于是檢查了my.cnf,有個關鍵參數(shù)是max_connections,即MySQL能建立的最大連接數(shù),設置的800。那為啥兩臺機器就只需建立400個連接都不行?

登錄到MySQL機器,執(zhí)行如下命令:

show variables like 'max_connections'

??可觀察到,當前MySQL僅建立了214個連接而已!難道MySQL根本不在乎我們設置的這參數(shù)?

檢查MySQL啟動日志:

Could not increase number of max_open_files to more than mysqld (request: 65535) Changed limits: max_connections: 214 (requested 2000)

Changed limits: table_open_cache: 400 (requested 4096)

MySQL發(fā)現(xiàn)自己無法設置max_connections為我們期望的800,于是強制為214!因為底層linux把進程可打開的文件句柄數(shù)限制為1024了,導致MySQL最大連接數(shù)是214!

Linux文件句柄數(shù)量被限制也會導致MySQL最大連接數(shù)被限制。

如何解決

核心就如下命令:

ulimit -HSn 65535

然后就能用如下命令,檢查最大文件句柄數(shù)是否被修改:

cat /etc/security/limits.conf cat /etc/rc.local

若都修改好之后,可在MySQL的my.cnf里確保max_connections參數(shù)也調(diào)整好了,然后重啟服務器、重啟MySQL,這樣linux的最大文件句柄就會生效,MySQL最大連接數(shù)也會生效了。

此時再嘗試業(yè)務系統(tǒng)去連接DB,就沒問題了。

為何Linux最大文件句柄限制為1024時,MySQL最大連接數(shù)是214?MySQL源碼中就是有個計算公式,算下來就是這樣的結果。

linux默認會限制你每個進程對機器資源的使用,包括:

  • 可打開的文件句柄的限制
  • 可打開的子進程數(shù)的限制
  • 網(wǎng)絡緩存的限制
  • 最大可鎖定的內(nèi)存大小

因為linux os設計的初衷,就是要盡量避免你某個進程一下子耗盡機器上的所有資源,所以他默認都是會做限制的。

對我們來說,常見問題就是文件句柄的限制。

因為若linux限制你一個進程的文件句柄太少,就會導致我們無法創(chuàng)建大量網(wǎng)絡連接,我們的系統(tǒng)進程就無法正常工作。比如MySQL運行時,其實就是Linux上的一個進程,那么他其實是需要跟很多業(yè)務系統(tǒng)建立大量的連接的,結果你限制了他的最大文件句柄數(shù)量,那么他就不能建立太多連接了!

所以,你在生產(chǎn)環(huán)境部署了個系統(tǒng),比如DB系統(tǒng)、MQ系統(tǒng)、存儲系統(tǒng)、Cache系統(tǒng)后,都需要調(diào)整Linux的一些內(nèi)核參數(shù),這個文件句柄數(shù)量一定要調(diào)整,通常得設為65535。

比如Kafka之類的MQ,在生產(chǎn)環(huán)境部署時,若不優(yōu)化linux內(nèi)核參數(shù),會導致Kafka可能無法創(chuàng)建足夠的線程,此時也無法運行。

所以可用ulimit命令設置每個進程被限制使用的資源量,用

# 進程被限制使用的各種資源的量
ulimit -a

  • core file size 進程崩潰時的轉(zhuǎn)儲文件的大小限制
  • max locked memory 最大鎖定內(nèi)存大小
  • open files 最大可以打開的文件句柄數(shù)量
  • max user processes就是最多前可進以擁有的子進程數(shù)量。久性的設置進程的資源

設置之后,要確保變更落地到/etc/security/limits.conf文件,永打印限制

所以執(zhí)行ulimit -HSn 65535命令后,要用如下命令檢查一下是否落地到配置文件里去了。

cat /etc/security/limits.conf

cat /etc/rc.local

標題名稱:線上MySQL不可用,報錯數(shù)據(jù)庫無法連接
文章地址:http://m.5511xx.com/article/cosoeoi.html