2014-01-10 4 views
1

Моя ситуация следующая: Мы запускаем Magento Professional на экземпляре RAM 15Gb.Убивать процессы apache, когда использование памяти достигает 90%

При запуске htop мы могли видеть, что «apache2 -k start» продолжает генерировать больше дочерних процессов, кто-то их ест ~ 900 Мб памяти.

Когда память почти исчерпана, все сайты тайм-аут или становятся очень медленными. Когда память все израсходована, кажется, что некоторые из этих процессов были убиты для освобождения памяти.

Затем выполняются те же самые процедуры.

Вопрос в том, можем ли мы настроить ubuntu/apache для уничтожения дочерних процессов и свободной памяти при использовании памяти до 85-90%?

+0

Не имеет значения, что все запросы будут немедленно прекращены, а клиенты получат сообщение «сервер неожиданно закрыл соединение»? Вы посмотрели на настройку 'ServerLimit' в конфигурации Apache? –

+0

Лучше попробовать перезапустить apache2, а просто убить их всех. Положите для него скрипт и запустите cron часто, как 5 минут, чтобы проверить использование mem. –

ответ

3

Попробуйте установить этот скрипт на сервере, как хрон каждые 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 

Это будет убивать процессы Apache, когда используется память достигает 90% и перезапускает apache2. Если вы не хотите устанавливать cron, просто запустите этот скрипт в любое время, когда вы хотите отрегулировать память, потребляемую apache.

Надеюсь, это поможет вашим требованиям.

+0

Хороший способ вычисления разностей памяти –