У меня есть веб-сервер на Linode 1024 VPS на основе
- Ubuntu 11.10
- Nginx 1.0.5
- PHP 5.3.6 (с PHP-FPM, APC)
- Лак 3.0.2
И пара блогов, основанных на WordPress 3.3.1. Одним из них является простой блог с конфигурацией по умолчанию, темой и просто постом «Hello World» для тестирования сервера. Другой - это блог, клонированный с другого сервера, с почти 10 тысячами сообщений и более 10 тысячами комментариев. Этот блог имеет около 5 тысяч уникальных вещей в день.
Сервер дает хорошие результаты в тесте ab для тестового блога , но тот же тест с клонированным блогом сделать невозможно: тест ab загружает сервер слишком сильно, и я должен остановить процесс, который в любом случае заставляет ab показать это действительно плохой результат .
Htop показывает также «нормальную» нагрузку при нормальной работе , но необычно большую нагрузку во время ab-теста.
Происходит еще одна странная вещь (самая важная для меня): время до первого байта очень велико , но после этого сайт очень быстро загружается. Это легко проверить с помощью таких сервисов, как tools.pingdom.com, что дает такой результат . Пожалуйста, обратите внимание на эту желтую область, что означает «Время ожидания».
Почему это происходит? Возможные идеи:
- Плохой конфиг PHP-FPM
- Время отклика Linode DNS ужасно. Ерунда - тестовый блог разрешает DNS отлично, TTFB - фантастика
- Плохой конфиг Nginx
Если кому-то нужна дополнительная информация,
- Здесь у вас есть текущий клонированный файл конфигурации nginx блога ( /etc/nginx/sites-available/muycomputerpro.com )
- Здесь у вас есть текущая конфигурация my.cnf ( /etc/mysql/my.cnf ) (я знаю, на данный момент не кеширование, это не имеет значения для TTFB в прошлом)
- Здесь у вас есть текущая конфигурация PHP-FPM ( /etc/php5/fpm/pool.d/www.conf )
if -f
директиве, которую вы используете вlocation
контейнере в конфигурации nginx. Исходя из того, что я читаю здесь: wiki.nginx.org/Pitfalls , у меня возникает ощущение, что-f
поиск файла неэффективен, что может вызвать проблему с временем до первого байта, особенно если у вас есть каталоги с большим количеством файлы.ab -n 1000 -c 100 -H 'Host: mysite.com' http://127.0.0.1/
Тем не менее, разница между кэшированными (Varnish) и некэшированными результатами достаточна для подтверждения позиции, что проблема не связана с сетью, DNS и т. Д. И заключается в обработке, как и ожидалось.Ответы:
Во-первых, это не ответ, а скорее диагностический подход.
Это ни в коем случае не является всеобъемлющим - или даже чем-то близким, это всего лишь отправная точка.
Время до первого байта
Время до первого байта (TTFB) имеет ряд компонентов:
Когда вы смотрите на вывод ApacheBench, вы также видите:
Сравнения для устранения компонентов
За некоторыми исключениями, ваша проблема будет заключаться в обработке бэкэнда, которая обычно сводится к слишком сложному / неэффективному коду или плохо настроенному MySQL.
Хороший способ решить эту проблему - провести серию сравнений, которые устранят различные аспекты вашей настройки. Хорошее сравнение должно быть максимально постоянным, чтобы помочь сузить проблему. В настоящее время вы предоставили следующие сравнения:
В идеальном случае вы должны дублировать свой полный сайт, но затем удалить весь контент, за исключением одной статьи и связанных с ней комментариев. Смысл этого теста состоит в том, чтобы окончательно определить, является ли большой объем контента проблемой или причинами являются другие аспекты вашей настройки (плагины для WordPress, тема и т. Д.). По сути, вы бы сравнили производительность идентичных сайтов на одном и том же (новом) сервере - загрузку одной и той же страницы (той же длины и т. Д.) - с той лишь разницей, что общий контент сайта (например, есть большая вероятность, что какой-то плагин не хорошо масштабируется с повышенным содержанием).
Не изменяя ничего, вы можете сделать несколько других сравнений:
Настройка вашего бэкенда
К этому моменту вы должны были либо найти проблему, либо сделать вывод, что она лежит в вашем бэкэнде. Это оставляет вас Nginx, PHP или MySQL.
(Я должен упомянуть, что это всегда удобно , чтобы знать , если узким местом является CPU, RAM, или I / O - между
sar
,top
,iostat
,vmstat
,free
., И т.д. , вы должны быть в состоянии прийти к какому - либо выводу по этому вопросу )Nginx
Nginx просто принимает запросы и либо обслуживает статический контент, либо переводит запросы в PHP-FPM - обычно с Nginx оптимизировать особо нечего.
В идеале у вашего тестового блога и клонированного блога должны быть одинаковые настройки, и в этом случае вы эффективно устранили проблему с Nginx.
заявка
В случае, когда вы пытаетесь идентифицировать проблему в своем коде (например, медленный плагин и т. Д.), Медленные журналы - это место для начала.
MySQL
PHP
PHP-FPM
Стоит отметить, что ваши результаты htop показывают, что php-fpm потребляет большую часть процессора - и ваша проблема, по-видимому, напрямую связана с этим.
Кэширование
Как только вы оптимизировали каждое возможное узкое место, начинайте кеширование.
Иногда, учитывая ограничения вашего приложения и аппаратного обеспечения, вы не сможете улучшить производительность бэкэнда настолько сильно - однако в этом и заключается смысл кэширования - чтобы минимизировать использование бэкенда.
дальнейшее чтение
источник
memory_limit
, что в другом посте было указано, что это не помогает с производительностью.