Профиль медленных PHP-страниц в производстве - PullRequest
6 голосов
/ 28 октября 2010

Есть ли способ профилирования только медленных PHP страниц на рабочем сервере?

В настоящее время мы записываем медленные страницы в текстовый файл, но без дополнительной информации сложночтобы сказать, почему они медленные (не всегда медленные).

Я раньше использовал профилировщик Xdebug , но я действительно не хочу включать это на наших производственных серверах, так как мывероятно, получит 100 запросов в секунду.Я также использовал Zend Platform , но я не хочу устанавливать его снова.

Ответы [ 5 ]

3 голосов
/ 25 ноября 2010

Вы можете изменить свои журналы Apache / HTTP Server, чтобы записывать время, потраченное на обработку каждого запроса.Следуйте этому руководству например.Затем вы можете собрать данные о том, сколько времени занимает каждый запрос, определить медленные страницы / запросы и использовать XDebug или WebGrind для дальнейшего анализа причин.

Easy, инет большого расхода на вашем производственном сервере.

2 голосов
/ 28 октября 2010

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

define('START_TIME', microtime(true));
function timer() {
    static $last;
    $time_since_start = microtime(true) - START_TIME;
    $time_since_last = microtime(true) - $last;
    // Do something with $time vars
    $last = microtime(true);
}

Также проверьте это: http://particletree.com/features/php-quick-profiler/

Может удовлетворить ваши потребности

0 голосов
/ 23 ноября 2010

Я знаю, что это не лучшее решение, но ...

Вы можете создать вспомогательный класс для регистрации каждого вашего процесса, а также время начала и окончания.Я знаю, что вы делаете это уже для всего процесса, но для каждой функции начала и конца вы можете добавить «Profiler :: logtime ( FUNC )»;

0 голосов
/ 23 ноября 2010

Предлагаю вам взглянуть на проект webgrind .Вы можете активировать профилирование для каждого запроса, что, возможно, позволит вам получать данные профилирования с вашего рабочего сервера без значительного снижения производительности.

Надеюсь, это поможет вам

0 голосов
/ 28 октября 2010

Я бы остерегался совершенно новой библиотеки для производственного сервера. Когда я отлаживаю, мне нравится использовать директивы * auto_prepend_file * и * auto_append_file * в php.ini. Вы можете легко сделать, как предложено выше, с этим методом и получить очень точное время для каждой загрузки страницы.

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

например, в php.in

auto_append_file = [location]/my_timer.php

my_timer.php

define('TRIGGER_TIME_LOG','3'); // Minimum number of timer seconds to log page load 

$time = time() - $_SERVER['REQUEST_TIME']; // Page load time

if($time >= TRIGGER_TIME_LOG)
{
  /*
   * DO LOGGING TO DB OR FLAT FILE HERE
   */
}
...