linux 記憶體分配參數導致的 buffer_pool 分配不出來的問題排查
- 2019 年 10 月 4 日
- 筆記
linux 記憶體分配參數導致的 buffer_pool 分配不出來的問題排查:
參考:http://blog.csdn.net/jollyjumper/article/details/24127009
原文:http://www.cnblogs.com/gomysql/p/6130405.html
vm.overcommit_memory
默認值為:0
從內核文檔里得知,該參數有三個值,分別是:
0:當用戶空間請求更多的的記憶體時,內核嘗試估算出剩餘可用的記憶體。
1:當設這個參數值為1時,內核允許超量使用記憶體直到用完為止,主要用於科學計算.
2:當設這個參數值為2時,內核會使用一個決不過量使用記憶體的演算法,即系統整個記憶體地址空間不能超過swap+50%的RAM值,50%參數的設定是在overcommit_ratio中設定。
vm.overcommit_ratio
默認值為:50
這個參數值只有在vm.overcommit_memory=2的情況下,這個參數才會生效。【使用 cat /proc/sys/vm/overcommit_ratio 查看】
那麼我們來看一下總的記憶體地址不能超過多少。其實是可以直接查看的。
[root@yayundeng 3306]# cat /proc/meminfo |grep -i commit
CommitLimit: 70144396 kB 最大可用虛擬記憶體【就是說mysql的buffer_pool 最大差不多能分配這麼多kB的記憶體空間】
Committed_AS: 135196 kB 已使用虛擬記憶體
通過查看可以得知在70G的樣子。那麼這個是如何計算的呢。
具體的70GB的計算方法如下:
最大可分配的虛擬記憶體(CommitLimit) = 總物理記憶體(MemTotal) × 百分比(vm.overcommit_ratio) + 交換分區大小(Swap)
對於我們上面這個環境來說,就是下面這個樣子:
[root@yayundeng 3306]# cat /proc/meminfo | grep MemTotal MemTotal: 132096808 kB 總物理記憶體 [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
最大可分配的虛擬記憶體 = 132096808*50% + 4095992 = 70144396 kB 差不多在70GB ,穩妥的話,設置60GB的buffer_pool即可。