1. 程式人生 > >數據庫mysqld進程屢次被殺,真的只是MySQL的問題?

數據庫mysqld進程屢次被殺,真的只是MySQL的問題?

問題 .com 系統 內存大小 麻煩 啟動 優化 inf httpd

曾經在我的博客服務器上發現過這樣一個問題,每隔幾天mysql服務進程就會莫名其妙的消失掉。這個問題持續時間非常長,前前後後花了我大半個月的時間,因為每次出現問題都是正常運行幾天後。

技術分享圖片

我意識到可能我的MySQL數據庫出現了問題。使用putty連接到我的服務器上,使用top命令後按下shift+M鍵以內存大小排列果然看不到mysqld進程了。打開系統的日誌文件(cat /var/log/mysqld.log),發現在下午的時候出現了內存報警的情況,隨後系統就殺掉了占據內存最大的MySQL進程,來緩解服務器壓力。

重新啟動mysql進程,並使用top命令盯著服務器上的進程列表到底發生了什麽變化。10分鐘左右,異常出現了,一大堆httpd進程冒了出來。而且每個進程都占據了2%-3%左右的內存,直到MySQL再次被殺時,服務器上被啟動的httpd進程已經高達三十多個,大約占據了快80%的內存,再加上mysqld占據的20%左右,幾乎沒有可以分配的內存了。原來問題出現在了Apache的身上。

技術分享圖片
在這裏說說Apache的工作原理。Apache有兩種工作模式,一種是prefork模式,另一種是worker模式。這兩種模式各有各的優點,prefork模式下每個連接創建一個進程,單對單。worker模式下一個進程對應多個連接,使用線程來進行處理,多對單。
然並卵,修改apache的工作模式,很麻煩,也不安全。不提倡修改。還是老老實實地優化prefork模式吧。

數據庫mysqld進程屢次被殺,真的只是MySQL的問題?