解决 MySQL 突然占用全部内存的问题

前段时间落格从虚拟主机迁移到了独立的vps上,这下所有的维护内容都得我自己动手了。为了性能,另外既然能自己配环境了,自然不会用旧的配置。

我用了 Ubuntu Server 16.04 + PHP 7.0 + Nginx + MySQL 5.7 总之,踩了不少的坑。

现在,来记录一下

关于 MySQL 为什么会突然占满内存

一开始我以为是vps遭到了攻击,可是只查看网卡流量就不是这么回事。第一次死机,我以为是配置错误,添加了一大堆缓存,减小了内存配置等等。但好景不长,又死了。

但之前为什么一直没有死机,这是一个迷。

在修复了表、优化了 MySQL 配置等一系列无用功之后,终于定位到了问题所在:

Performance Schema

这是在 5.6 版本中开始默认开启的一项功能,它会在 MySQL 启动之后悄悄占用 400M 左右的内存来加速 MySQL 的运行——对于动辄近百的企业级服务器来说,可能不值一提,但是对于咱们这种屌丝小 vps (我这个 1GB 独立内存算是不错的了)来说,可就要顶了天了!

所以,这大概就是为什么我的服务器最近连续死机两次了。

要关闭 Performance Schema ,在你的 MySQL 配置文件的  [mysqld] 字段添加一句  performance_schema = off

这样,我的数据库就稳定在 300M 内存左右了。

参考

Starting MySQL On Low Memory Virtual Machines

MySQL 内存占用过高分析

发布者:R0uter

如非声明,本人所著文章均为原创手打,转载请注明本页面链接和我的名字。

加入对话

3条评论

电子邮件地址不会被公开。 必填项已用*标注