一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

Mysql|Sql Server|Oracle|Redis|MongoDB|PostgreSQL|Sqlite|DB2|mariadb|Access|數據庫技術|

服務器之家 - 數據庫 - Mysql - MySQL啟動錯誤解決方法

MySQL啟動錯誤解決方法

2020-07-04 16:05yayun Mysql

本文給大家分享的是mysql啟動時報錯的排查過程及方法,非常實用,有相同問題的小伙伴可以來參考下

一般情況下mysql的啟動錯誤還是很容易排查的,但是今天我們就來說一下不一般的情況。拿到一臺服務器,安裝完mysql后進行啟動,啟動錯誤如下:

MySQL啟動錯誤解決方法

有同學會說,哥們兒你是不是buffer pool設置太大了,設置了96G內存。這明顯提示無法分配內存嘛。如果真是這樣也就不在這里進行分享了,哈哈。

我的服務器內存是128G。如下圖:

MySQL啟動錯誤解決方法

服務器內存使用情況:

MySQL啟動錯誤解決方法

那么問題來了,既然還剩如此多的內存,為什么提示無法分配內存??。各位童鞋怎么看?

1. 首先想到會不會是有幾條內存壞了?于是運維的同學進行了檢查,給我的反饋是硬件一切正常。

2. 把mysql配置參數又檢查了一遍,沒有發現什么問題,線上一直就是使用這些參數。

3. 又把文件拷貝到另外一臺機器,,另外一臺服務器可以正常啟動(2臺機器硬件配置一致)。

那么如果排除硬件問題,mysql配置問題,那么剩下的就只有操作系統的內核參數配置了。于是把兩臺服務器進行了對比,最終發現了一個內核參數不一致。

 

復制代碼 代碼如下:
vm.overcommit_memory

mysql啟動正常的服務器改參數的值是0,而mysql啟動錯誤的這臺服務器該值是2。
MySQL啟動錯誤解決方法

那么問題來了,這個參數到底是什么鬼?竟然會讓mysql分配內存失敗,最后導致無法啟動。經過查詢資料知道了vm.overcommit_memory是什么鬼。

vm.overcommit_memory

默認值為:0
從內核文檔里得知,該參數有三個值,分別是:
0:當用戶空間請求更多的的內存時,內核嘗試估算出剩余可用的內存。
1:當設這個參數值為1時,內核允許超量使用內存直到用完為止,主要用于科學計算.
2:當設這個參數值為2時,內核會使用一個決不過量使用內存的算法,即系統整個內存地址空間不能超過swap+50%的RAM值,50%參數的設定是在overcommit_ratio中設定。


vm.overcommit_ratio
默認值為:50

MySQL啟動錯誤解決方法
這個參數值只有在vm.overcommit_memory=2的情況下,這個參數才會生效。

那么我們來看一下總的內存地址不能超過多少。其實是可以直接查看的。

?
1
2
3
4
[root@yayundeng 3306]# cat /proc/meminfo |grep -i commit
CommitLimit:  70144396 kB
Committed_AS:   135196 kB
[root@yayundeng 3306]#

通過查看可以得知在70G的樣子。那么這個是如何計算的呢?這個就是上面提到的一個公式。swap+50%的RAM值,50%參數的設定是在overcommit_ratio中設定。

總虛擬內存 = 可用物理內存 × 百分比 + 交換分區

?
1
2
3
4
5
6
7
8
9
10
11
[root@yayundeng 3306]# cat /proc/meminfo | grep MemTotal
MemTotal:    132096808 kB
[root@yayundeng 3306]#
[root@yayundeng 3306]# free -k
       total    used    free   shared  buffers   cached
Mem:   132096808  1583944 130512864     0   10240   133220
-/+ buffers/cache:  1440484 130656324
Swap:   4095992     0  4095992
[root@yayundeng 3306]# cat /proc/sys/vm/overcommit_ratio
50
[root@yayundeng 3306]#

總虛擬內存=132096808 * 50% + 4095992= 70144396 kB

那么最后的結果就是buffer pool不能超過70144396 kB - 135196 kB=70009200 KB=66G。實際上經過測試,buffer pool只能設置57G。
MySQL啟動錯誤解決方法

最后在看看總虛擬內存情況:

CommitLimit:最大可用虛擬內存

Committed_AS:已使用虛擬內存

?
1
2
3
[root@yayundeng 3306]# cat /proc/meminfo |grep -i commit
CommitLimit:  70144396 kB
Committed_AS:  65539208 kB

那么如果把內核參數vm.overcommit_memory恢復為默認值0,那么將不會受到約束。

 

復制代碼 代碼如下:
echo 0 > /proc/sys/vm/overcommit_memory

MySQL啟動錯誤解決方法

 參考資料:

http://serverfault.com/questions/606185/how-does-vm-overcommit-memory-work
http://linuxperf.com/?p=102

 總結:

說了這么多,那么為什么要修改內核參數vm.overcommit_memory的值呢?這個是因為這臺服務器之前跑過GreenPlum數據庫,拿到我手上的時候沒有進行重裝系統,那么還是建議如果拿到的機器之前跑過其他的業務,那么保險的方法還是重裝一下系統,然后再部署自己的業務,不然真的會出現莫名其妙的問題。

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 美女狂揉尿口揉到失禁 | 免费特黄一级欧美大片在线看 | 亚洲色图影院 | 1377大但人文艺术包子铺 | 久久这里只精品热在线18 | 欧美精品超清在线播放 | 逼逼日| 天堂成人在线 | 免费观看全集 | 91天堂在线视频 | 色综合91久久精品中文字幕 | 亚洲高清毛片一区二区 | 污到你怀疑人生 | 国产精品乱码高清在线观看 | 国产成人久久精品区一区二区 | 无罩看奶禁18 | 欧美精品亚洲精品日韩1818 | 蜜臀91 | 国产传媒在线播放 | a片毛片在线免费看 | vomoulei成人舞蹈 | 日本在线视频免费看 | 亚洲小视频 | 女同69式互添在线观看免费 | 亚洲精品国产专区91在线 | 草溜短视频 | 五月激激激综合网色播免费 | japanese人妖xvideos | 俄罗斯年轻男同gay69 | 深夜在线观看 | 手机看片日韩1024你懂的首页 | 极品美女写真菠萝蜜视频 | 欧美高清milf在线播放 | 国产国语在线播放视频 | 草草影院免费 | 成人四虎 | 99视频导航 | 西西人体大胆77777视频 | 国产在线极品 | 成人国产第一区在线观看 | 日韩亚洲欧美综合一区二区三区 |