Какой идеальный способ профилировать использование памяти WordPress?

8

В настоящее время мы запускаем многосайтовый экземпляр WordPress на двух серверах Rackspace Cloud, одной веб-базе и одной базе данных, на которых в настоящее время находится около 30 сайтов. Я поставил Nginx вперед для статических ресурсов, и Apache обрабатывает все динамические запросы. Я также настроил Memcached для базы данных и кэширование кода операции APC для PHP. W3 Total Cache включен по умолчанию на всех наших сайтах.

Он быстро работает с одной проблемой: процессы Apache регулярно весят от 80 до 120 МБ. Веб-сервер имеет 2 ГБ памяти, что означает, что я получаю около 15 процессов, пока все не пойдет на фритюре. Очевидно, что процессы не должны быть такими большими, но я недоумеваю, почему они таковы.

Какова хорошая стратегия для определения того, что происходит?

Заранее спасибо!

Обновление 10/2/10: Для тех, кому интересно, решением проблемы с памятью было отключение PHP xdebug (он был случайно включен в конфигурацию и вызывал случайные скачки использования памяти).

Даниэль Бачхубер
источник

Ответы:

4

Объем памяти процесса apache, о котором вы говорите (от 80 до 120 МБ на процесс), можно разделить на две причины.

  1. апаш
  2. Wordpress

апаш

Вы можете оптимизировать Apache, загружая только необходимое количество модулей и другие настройки оптимизации, которые уменьшат объем памяти. Если вы еще не оптимизировали это, дайте ему некоторые настройки.

Wordpress

Wordpress просто потребляет много памяти и вообще не очень оптимизирован. Я бы начал с замены класса базы данных на что-то более правильно реализованное. Это должно увеличить скорость и значительно сократить использование памяти. Рядом с этим я не так много, чтобы предложить. Не думаю, что использование Worpdress не считается полезным.

Стратегии

Чтобы выяснить, что происходит, вам нужно отследить, сколько памяти занимает запрос WordPress. Существует функция получения максимального использования ( memory_get_peak_usage()), которую вы можете использовать для отслеживания использования памяти worpdress. Если он приближается к 80–120 МБ, о которых вы писали, вы знаете, что WordPress создает ваши головные боли. Возможно, вы захотите записать отметку времени, пиковую память, время выполнения и запрошенный URI.

Использование Nginx для обслуживания кэшированных страниц WordPress наверняка поможет вам, потому что он предотвратит загрузку WordPress - даже для тех «входящих» кэшей, как тот, который вы используете. Они концептуально сломаны, потому что они являются плагином WordPress, поэтому по крайней мере часть WordPress должна быть загружена даже для кэшированных результатов.

hakre
источник
1

Daniel,

Я с уважением не согласен с kenkeiter, я понимаю использование nginx в качестве обратного прокси-сервера перед Apache. Гарвард Лоу имел большой успех с этим методом, и у них есть отличная статья о том, как они это делают, со ссылкой на их плагин WordPress, который помогает взаимодействовать с nginx:

http://blogs.law.harvard.edu/djcp/2010/01/nginx-as-a-front-end-proxy-cache-for-wordpress/

Что они обнаружили в Harvard Law, так это то, что nginx, в основном, кэширует все запросы во внешнем интерфейсе, фактически не повышает производительность при использовании любых других плагинов кэширующего типа в бэкэнде и не стоит дополнительной сложности. Если вы серьезно относитесь к использованию nginx таким образом, я рекомендую вам взглянуть на эту статью об их опыте и попытаться сократить динамические процессы, включая кэширование на стороне WP.

Хорошим началом может быть также некоторая базовая работа, например, тщательный просмотр вашего доступа к Apache и журналов ошибок, чтобы увидеть, какие типы запросов фактически должны выполняться динамически, и попытка уменьшить количество таких случаев.

mitcho
источник
0

Ну, во-первых, вы используете Apache и Nginx - что-то вроде избыточности. Вы должны использовать Nginx / FastCGI с PHP. Учебник на этом сайте должен помочь. В противном случае, я думаю, что некоторые недавние изменения в вашем коде приводят к тому, что некоторые ошибки в PHP не освобождают память должным образом. Нет причины, по которой процесс Apache должен занимать столько памяти.

http://interfacelab.com/nginx-php-fpm-apc-awesome/

Удачи!

@kenkeiter


источник
Nginx / FastCGI было бы здорово, но это выходит за рамки решения этой проблемы
Даниэль Бачхубер,