服务器报错Out of memory: Kill process (mysqld)内存溢出

来源:互联网 发布:查看电脑mac地址 编辑:程序博客网 时间:2024/06/07 02:31

最近写的一个定时任务,定时执行更新一张表数据的操作,但是每次执行都会导致服务器挂掉。。。。

日志显示如下;




Out of memory: Kill process 830(mysqld) score 611 or sacrifice child 

MySQL占用的太多内存.这台服务器内存只有1g,看来是内存不足。

Out of memory 问题,这通常是因为某时刻应用程序大量请求内存导致系统内存不足造成的,这通常会触发 Linux 内核里的 Out of Memory (OOM) killer,OOM killer 会杀掉某个进程以腾出内存留给系统用,不致于让系统立刻崩溃。


在整体的系统运行过程中,数据服务器 MySQL 的压力是最大的,不仅占用很多的内存和 cpu 资源,而且占用着大部分的磁盘 io 资源。

一、优化mysql缓存----

mysql>show variables like '%query_cache%';     mysql本身是有对sql语句缓存的机制的,合理设置我们的mysql缓存可以降低数据库的io资源。


    #query_cache_type= 查询缓存的方式(默认是 ON)
    query_cache_size 如果你希望禁用查询缓存,设置 query_cache_size=0。禁用了查询缓存,将没有明显的开销,
    query_cache_limit 不缓存大于这个值的结果。(缺省为 1M)


找到/etc/mysql/my.cnf 配置进行修改(注意备份):首先我把query_cache_size这个值改为了0.禁用了缓存


二、再提一下key_buffer_size


key_buffer_size是对MyISAM表性能影响最大的一个参数

key_buffer_size表示索引缓冲区的大小,严格说是它决定了数据库索引处理的速度,尤其是索引读的速度。

可以检查状态值Key_read_requests和Key_reads,即可知道key_buffer_size设置是否合理。比例key_reads / key_read_requests应该尽可能的低,至少是1:100,1:1000更好,如果这个数值过大,就应该调高key_buffer_size的数值


对于1G内存的机器,如果不使用MyISAM表,推荐值是16M(8-64M)


重启mysql:  service mysqld start


启动服务,测试。没有再报错。


附上相关博客:http://blog.csdn.net/rainysia/article/details/8767946

http://blog.sina.com.cn/s/blog_8a18c33d01011odu.html


1 0
原创粉丝点击