1. 程式人生 > >伺服器報錯Out of memory: Kill process (mysqld)記憶體溢位

伺服器報錯Out of memory: Kill process (mysqld)記憶體溢位

最近寫的一個定時任務,定時執行更新一張表資料的操作,但是每次執行都會導致伺服器掛掉。。。。

日誌顯示如下;


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