MySQL启动错误解决方法
一般情况下mysql的启动错误还是很容易排查的,今天我们就来说一下不一般的情况。拿到一台服务器,安装完mysql后进行启动,启动错误如下
有同学会说,哥们儿你是不是buffer pool设置太大了,设置了96G内存。这明显提示无法分配内存嘛。如果真是这样也就不在这里进行分享了,哈哈。
我的服务器内存是128G。如下图
服务器内存使用情况
那么问题来了,既然还剩如此多的内存,为什么提示无法分配内存??。各位童鞋怎么看?
1. 想到会不会是有几条内存坏了?于是运维的同学进行了检查,给我的反馈是硬件一切正常。
2. 把mysql配置参数又检查了一遍,没有发现什么问题,线上一直就是使用这些参数。
3. 又把文件拷贝到一台机器,,一台服务器可以正常启动(2台机器硬件配置一致)。
那么如果排除硬件问题,mysql配置问题,那么剩下的就只有操作系统的内核参数配置了。于是把两台服务器进行了对比,最终发现了一个内核参数不一致。
mysql启动正常的服务器改参数的值是0,而mysql启动错误的这台服务器该值是2。
那么问题来了,这个参数到底是什么鬼?竟然会让mysql分配内存失败,导致无法启动。经过查询资料知道了vm.overmit_memory是什么鬼。
vm.overmit_memory
默认值为0
从内核文档里得知,该参数有三个值,分别是
0当用户空间请求更多的的内存时,内核尝试估算出剩余可用的内存。
1当设这个参数值为1时,内核允许超量使用内存直到用完为止,主要用于科学计算.
2当设这个参数值为2时,内核会使用一个决不过量使用内存的算法,即系统整个内存地址空间不能超过swap+50%的RAM值,50%参数的设定是在overmit_ratio中设定。
vm.overmit_ratio
默认值为50
这个参数值只有在vm.overmit_memory=2的情况下,这个参数才会生效。
那么我们来看一下总的内存地址不能超过多少。其实是可以直接查看的。
[root@yayundeng 3306]# cat /proc/meminfo |grep -i mit CommitLimit: 70144396 kB Committed_AS: 135196 kB [root@yayundeng 3306]#
通过查看可以得知在70G的样子。那么这个是如何计算的呢?这个就是上面提到的一个公式。swap+50%的RAM值,50%参数的设定是在overmit_ratio中设定。
总虚拟内存 = 可用物理内存 × 百分比 + 交换分区
[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/overmit_ratio 50 [root@yayundeng 3306]#
总虚拟内存=132096808 50% + 4095992= 70144396 kB
那么的结果就是buffer pool不能超过70144396 kB - 135196 kB=70009200 KB=66G。实际上经过测试,buffer pool只能设置57G。
在看看总虚拟内存情况
CommitLimit最大可用虚拟内存
Committed_AS已使用虚拟内存
[root@yayundeng 3306]# cat /proc/meminfo |grep -i mit CommitLimit: 70144396 kB Committed_AS: 65539208 kB
那么如果把内核参数vm.overmit_memory恢复为默认值0,那么将不会受到约束。
参考资料
说了这么多,那么为什么要修改内核参数vm.overmit_memory的值呢?这个是因为这台服务器之前跑过GreenPlum数据库,拿到我手上的时候没有进行重装系统,那么还是建议如果拿到的机器之前跑过其他的业务,那么保险的方法还是重装一下系统,然后再部署自己的业务,不然真的会出现莫名其妙的问题。
编程语言
- 如何快速学会编程 如何快速学会ug编程
- 免费学编程的app 推荐12个免费学编程的好网站
- 电脑怎么编程:电脑怎么编程网咯游戏菜单图标
- 如何写代码新手教学 如何写代码新手教学手机
- 基础编程入门教程视频 基础编程入门教程视频华
- 编程演示:编程演示浦丰投针过程
- 乐高编程加盟 乐高积木编程加盟
- 跟我学plc编程 plc编程自学入门视频教程
- ug编程成航林总 ug编程实战视频
- 孩子学编程的好处和坏处
- 初学者学编程该从哪里开始 新手学编程从哪里入
- 慢走丝编程 慢走丝编程难学吗
- 国内十强少儿编程机构 中国少儿编程机构十强有
- 成人计算机速成培训班 成人计算机速成培训班办
- 孩子学编程网上课程哪家好 儿童学编程比较好的
- 代码编程教学入门软件 代码编程教程