我在一台小机器上吃太多的内存时遇到了很多麻烦,我正在寻找一些帮助,弄清楚它为什么吃这么多。
我有一个运行Debian Wheezy的256MB内存的小型虚拟机。 在这台服务器上,我安装了apache2和mysql。 我在这个服务器上做的不多,只有一些使用简单的网站和一个邮件服务器。
出于某种原因,一天几次,我的MySQL服务器崩溃。 当我检查我的系统日志时,我发现以下错误:
内核:[3323593.630722]内存不足UB:OOM杀死进程9471(mysqld)得分0 vm:327824kB,rss:37080kB,swap:0kB
所以据我所知,mysql开始消耗太多的内存,并被系统杀死。 我logging缓慢的查询,并保持我的mysql.err日志上的选项卡,但我没有看到任何东西,会告诉我为什么MySQL开始吃这么多的内存太多的价值。
我my.cnf文件有这些选项设置:
key_buffer = 8M max_allowed_packet = 16M thread_stack = 128K thread_cache_size = 8 query_cache_limit = 512K query_cache_size = 8M
另一件事是,当我检查正在使用的内存量,当我启动MySQL,甚至在运行的白天,我通常有大约128MB的空闲。 我看不出mysql将如何最终吃掉那么多。
我能做些什么来追踪这个问题?
Apache和MySQL的256 MB是非常低的。 我总是推荐至less512MB的组合(这是最低限度)。 然而你说的并不一定是MySQL造成的问题,它只是OOM杀手杀死MySQL,因为VM内存不足。 除此之外,MySQL有很多默认值,所以即使你没有在my.cnf中设置它们,innodb_buffer_pool_size也会声明8MB等等。