2013-06-22 45 views
5

時當系統內存用完微實例殺死它的,Ubuntu 12.04殺死MySQL進程:重啓MySQL時自動Ubuntu的EC2上運行內存

Out of memory: Kill process 17074 (mysqld) score 146 or sacrifice child 

所以這個過程結束了殺害。 這發生在服務器負載高峯期,主要是因爲apache越來越狂野,吃剩下的可用內存。可能的方法可以是:

  • 變化在某種程度上某處的mysql的優先級,所以它不是殺死(可能是一個壞修復的東西都不會被殺死)
  • 監控MySQL的狀態,每當它殺死了自動重啓(我正在考慮的那個,但不知道如何去做)。

你是怎麼看到它的?

回答

8

突然終止數據庫服務器是非常嚴重的崩潰。您需要在生產系統中避免這種情況,因爲它可能無法完全重新啓動。

數據庫服務器是一個共享資源,應該幾乎不會以非計劃的方式終止生產。唯一導致計劃外終止的事情是災難性的硬件或電源故障。大多數正確配置的生產數據庫服務器每十年或更少頻率出現一次無計劃終止。認真。

怎麼辦?

修復您的apache配置。限制它可以使用的工作線程和進程的數量,所以它不能運行。學習如何做到這一點。這是至關重要的。看到這裏:http://httpd.apache.org/docs/current/mod/mpm_common.html#maxrequestworkers

修復你的web應用程序中導致你的Apache運行的缺陷。

如果可以,請將您的mysqld服務器從apache移動到不同的服務器計算機,這樣兩者不會爭用相同的硬件資源。

配置您的mysqld以限制它將從apache工作線程或其他客戶端接受的連接數。您的Web應用程序可能處理工作線程需要等待連接的情況。看這裏。 http://dev.mysql.com/doc/refman/5.0/en/server-system-variables.html#sysvar_max_connections

您是否在EC2微型實例上?你需要做一些嚴肅的調整。在這裏看到:http://ubuntuforums.org/showthread.php?t=1979049

+4

謝謝奧利!是的,你是對的,我試圖擠壓一個EC2微型實例。然後我會繼續調整apache和mysql,並開始考慮擴大規模和縮小規模。 但是有沒有辦法檢測到mysql失敗並自動重新啓動?以防萬一,當我沒有監視服務器,而我沒有更優化它。 – Alex

3

您可以檢查每分鐘(通過計劃),MySQL的狀態,並重新啓動,如果它是崩潰:

* * * * * service mysql status | grep running || service mysql restart 
+0

謝謝你。它爲我工作。只是/ var/spool/mail/root在某個時候因爲這個而變得很大。 – sulabh

相關問題