2014-01-10 24 views
1

我的情況如下: 我們在15Gb ram實例rackspace上運行Magento Professional。當內存使用率達到90%時,終止apache進程

當運行htop時,我們可以看到'apache2 -k start'不斷產生更多的子進程,有人他們吃了〜900Mb的內存。

當內存幾乎用完時,所有網站超時或變得非常慢。 當內存全部用完時,似乎這些進程中的一些被殺死以釋放內存。

然後發生相同的程序。

我的問題是,當內存使用率達到85-90%時,我們可以設置ubuntu/apache來關閉子進程並釋放內存嗎?

+0

所有請求都會立即終止並且客戶端會收到「服務器意外關閉連接」消息,這是不是相關的?你看過在Apache配置中調整'ServerLimit'嗎? –

+0

更好地嘗試重新啓動到apache2,而不是簡單地將它們全部殺死。將腳本放在它上面並經常像cron那樣運行,就像5分鐘一樣檢查mem的使用情況。 –

回答

3

嘗試爲cron的在你的服務器設置這個腳本每2分鐘或5分鐘

#!/bin/sh 
TOTAL=`cat /proc/meminfo | grep MemTotal: | awk '{print $2}'` 
USEDMEM=`cat /proc/meminfo | grep Active: | awk '{print $2}'` 
LOG=/tmp/test.log 
echo > $LOG 
if [ "$USEDMEM" -gt 0 ] 
then 
    USEDMEMPER=$[$USEDMEM * 100/$TOTAL ] 
    echo "Current used memory = $USEDMEMPER %" 
    if [ "$USEDMEMPER" -gt 90 ]; then 
     killall -9 apache2 
     service apache2 restart 
     echo "apache process killed " >> $LOG 
    fi 
fi 
cat $LOG 

這當使用內存達到90%,並重新啓動的Apache2會殺了你的Apache進程。如果你不想設置爲cron,只要你想調節apache消耗的內存,只需運行這個腳本。

希望這可以幫助您的要求。

+0

計算記憶差異的好方法 –

相關問題