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


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

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

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

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

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

Author: Daniel Bachhuber, 2010-09-01

3 answers

Объем памяти процесса 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
Author: hakre, 2010-09-05 09:37:46

Даниэль,

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

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

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

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

 1
Author: mitcho, 2010-09-02 03:13:34

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

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

Удачи!

@кенкейтер

 0
Author: , 2010-09-01 19:48:46