几天前,我安装了一台新机器,运行CentOS 5.6 (64bit), with 12GB ddr3 ram, 4x SAS 15k rpm drives in RAID10
。在这台机器上,我运行的是 MySQL 服务器版本:5.1.39-maria-beta-ourdelta67-log
,我在以前的服务器上也使用过这个版本,效果很好。这是我的my.cnf
http://pastebin.com/kLfmbHSW
现在,在今天早上之前,MySQL 总是会用完我设置的指定 RAM my.cnf
(大约 12GB 的 95%)。启动 mysql 后,我会立即检查“top”,结果确实占用了 95% 的 RAM。
但是现在,在我重新启动 MySQL 之后,当我点击“top”时,我会看到这个。
Mem: 12289856k total, 1884924k used, 10404932k free, 39660k buffers
只使用了大约 15%。这个数字上升得有点慢,但之前它总是会立即用完所有 RAM。
这可能是什么原因造成的?
更新:自从我重启 mysql 后,它就慢慢占用了越来越多的内存,最后占用了我所有的 12gb,整个机器都死机了。我不得不重启 linux 才能让它重新上线。现在它又占用了 1.8gb,并且还在慢慢增加。整个内存管理似乎很糟糕,因为它占用了更多的内存,但从不刷新它。
知道可能是什么原因造成的吗?
答案1
看起来你运行的是测试版,这个版本往往有缺陷。但是,仅仅因为你指定了要使用的内存,并不意味着操作系统会分配它。当 mysql 向操作系统询问你有多少内存(比如说 8GB)时,它会收到一种承诺书:“是的,当然可以,你可以有 8GB”。
然后应用程序(本例中为 mysql)管理自己的堆以及使用的内存量。随着堆的增加和查询数量的增加,使用量也会增加。这就是为什么您会看到使用量随时间增加的原因。
您的服务器被锁定的原因可能有很多种,例如其他应用程序使用的内存比您预期的要多,或者只是 mysql 中存在一个错误(我认为不太可能)。
答案2
现在似乎已经解决了。我不得不重建所有索引,之后 mysql 内存使用率恢复正常。虽然我之前对所有表和索引进行了 mysql 检查,并且没有发现任何错误,但重建索引确实解决了该问题。
感谢大家的建议!