Apache с mod_php высокой загрузкой памяти

Вы называете Сайт. Остановиться () случайно? Это действительно изменяет свойство автоматического запуска сайта ко лжи, вызов Запускаются (), задержал бы его к истинному.

Для проверки нет никаких других приемов, Вы я рекомендовал бы копировать файл %windir %\System32\Inetsrv\Config\ApplicationHost.config в некоторый резервный каталог, затем запустил бы Ваше приложение развертывания и затем Разность оба файла после этого и видел бы различия, мое предположение - то, что Вы будете видеть некоторый набор свойств автоматического запуска ко лжи. Если это так, это вызывается из-за вызова Остановки, и никогда вызов Запускаются снова (перед CommitChanges)

Проверьте, чтобы видеть, имеет ли Ваш код шаблон: Сайт. Остановитесь ()... делают изменения в памяти.... ServerManager. CommitChanges ().... Сайт. Запустите ()

Вы никогда не будете фиксировать последний Запуск, который изменил его для автозапуска

0
задан 17 May 2012 в 12:41
3 ответа

@raj you'll probably find that the processes are in an S state as they are waiting on another process (in a D state) bound by I/O ie. For the machine to stop swapping.

So the key is to address two key issues, standard memory allocation and memory commitment.

When running Magento, it is fairly easy to massively over commit on RAM simply by setting PHP Max memory limits too high. Under normal circumstances, it won't have any ill effects, but the moment the app tries to use that memory, it will almost immediately go into swap (if you've run out of RAM that is).

Then, you'll likely find that Apache isn't the main concern for memory usage, but rather MySQL is more likely the culprit.

You haven't mentioned your server specification or any specific details for your store, so it would be impossible to accurately advise. But simply revising your Apache and MySQL configuration would be an easy place to start. Drop the number of Apache threads, MySQL connections, allocated memory commitments. Then start graphing with a tool like Munin to actually be able to correlate traffic, threads, CPU usage and memory usage. Without doing so, you are working blind.

But I would advise to stop poking around netstat as you are a long way off needing to diagnose TCP states; you need to start from the beginning.

2
ответ дан 4 December 2019 в 12:45

Прочтите несколько хороших книг о настройке HTTP и управлении производительностью (на самом деле - вы вряд ли получите здесь ответ).

что вызывает подкачку памяти

Тогда ваш сервер плохо настроен - веб-сервер не должен никогда начинать подкачку. Примените обычный ритуал настройки apache и уменьшите максимальный объем памяти php.

всякий раз, когда на сервере apache наблюдается высокая нагрузка, процессы apache, вызывающие высокую нагрузку, находились в спящем режиме на конце mysql

А? Спящий процесс по определению не влияет на загрузку. Какой конец mhysql?

1
ответ дан 4 December 2019 в 12:45

Используйте этот сценарий: http://saiweb.co.uk/linux/apache/bash%20script/linux-the-sysadmin-script-part-3/

чтобы определить, сколько памяти используют ваши процессы apache.

Затем ограничьте MaxClients в конфигурации apache объемом процесса, который вы можете запустить без подкачки. В этом случае при возникновении проблемы у вас не будет высокого ЛА, и вы сможете найти реальный источник проблемы. Вот моя версия скрипта (ссылка выше, похоже, сейчас не работает)

#!/bin/bash
       if [ -z "$1" ]; then
                echo "Usage: sysadmin appmem app_name i.e. (sysadmin appmem apache)";
        else
                RRES=(`ps aux | grep "$1" | grep -v 'grep' | grep -v "$0" | awk '{print $6}'`);
                VRES=(`ps aux | grep "$1" | grep -v 'grep' | grep -v "$0" | awk '{print $5}'`);
                COUNT=0;
                VMEM=0;
                RMEM=0;
                for RSS in ${RRES[@]}
                do
                        RMEM=$(($RSS+$RMEM));
                done;
                for VIRT in ${VRES[@]}
                do
                        VMEM=$(($VIRT+$VMEM));
                        COUNT=$(($COUNT+1));
                done;
                VMEM=$(($VMEM/$COUNT));
                VMEM=$(($VMEM/1024));
                RMEM=$(($RMEM/1024));
                echo -e "$YELLOW ----- MEMORY USAGE REPORT FOR '$1' ----- $CLEAR";
                echo "PID Count: $COUNT";
                echo "Shared Mem usage: $VMEM MB";
                echo "Total Resident Set Size: $RMEM MB";
                echo "Mem/PID: $(($RMEM/$COUNT)) MB";
        fi
0
ответ дан 4 December 2019 в 12:45

Теги

Похожие вопросы