2016-06-05 2 views
0

Я использую следующий PHP-код для измерения времени выполнения скриптов PHP/MySQL.Производительность ответа HTTP падает при загрузке

$start = microtime(true); 

/* any PHP with HTML output */ 

echo (microtime(true) - $start); 

Это измерение всегда печатает аналогичный результат независимо от нагрузки на сервер. Время выполнения обычно составляет 0,1 секунды на разных страницах, полностью не зависящих от нагрузки на сервер.

Но когда сервер находится под некоторой нагрузкой (100 одновременных пользователей), каждая страница занимает несколько секунд, чтобы физически отображаться в браузере. Из этого наблюдения я предполагаю, что HTTP-сервер страдает от снижения производительности?

Где я должен исправить эту проблему?

+2

Распространять нагрузку? Профилируйте свой код? Проверьте свои индексы DB/медленные запросы? О, так много разных ответов. –

+0

@ jonstirling Я сомневаюсь, что это имеет какое-либо отношение к PHP или базе данных, потому что время выполнения всегда остается низким. Он ведет себя так, как будто передача HTTP-данных клиенту заняла некоторое время. Может быть проблема с низкой пропускной способностью? – ahojvole

+0

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

ответ

0
  1. Положите меры в самом начале и конце сценария, чтобы измерить все время php.

  2. Включить ведение журнала веб-сервера (Apache или Nignx). Например: https://lincolnloop.com/blog/tracking-application-response-time-nginx/

  3. Сколько php-процессов существует? Проверьте, могут ли ваши запросы в очереди ждать бесплатного рабочего? Попробуйте настроить настройки веб-сервера php-fpm (если вы его используете).

+0

1. Да, время php измеряется целиком, начиная с конца. 2. Будет делать 3. phpMyAdmin показывает 12 процессов во время высокого трафика. Я переключился на nginx из Fast-CGI из-за проблем с очередью php. Должен ли я настраивать что-либо в частности или вообще? – ahojvole

+0

3. Зависит от вашей системы. Максимальное количество одновременно работающих процессов составляет около 2 * ядер процессора. Вы можете установить больше процессов в fpm, но они будут ждать в очереди процессора, потребляя больше памяти. Проверьте доступную память и ограничения в конфигурации. Если вы попытаетесь использовать больше, чем вы, вы попадаете в своп. –

+0

Аппаратное обеспечение еще не является узким местом. В использовании используется корневой сервер с 24 vCores (нагрузка 15%), 120 ГБ оперативной памяти (91 ГБ бесплатно), phpMyAdmin всегда показывает использование подкачки на 0%. Эти цифры относятся к самым высоким периодам трафика. Другим наблюдением и измерением является REST API, написанный на php, который общается с приложением iOS. Этот API, работающий на том же сервере, также не имеет никакого снижения производительности. Единственное видимое изменение производительности происходит при загрузке веб-страницы в браузере. – ahojvole

Смежные вопросы