it-swarm.xyz

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

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

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

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

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

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

8
Daniel Bachhuber

Объем памяти процесса 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 должна быть загружена даже для кэшированных результатов.

4
hakre

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 и журналов ошибок, чтобы увидеть, какие типы запросов фактически должны выполняться динамически, и попытка уменьшить количество таких случаев.

1
mitcho

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

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

Удачи!

@kenkeiter

0
kenkeiter