最近写的一个定时任务,定时执行更新一张表数据的操作,但是每次执行都会导致服务器挂掉。。。。
日志显示如下;
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%';
找到/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