Профиль медленных страниц PHP в производстве

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

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

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

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

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

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

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/

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

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

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

например, в 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 */ } 

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

Я надеюсь, что это поможет вам

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

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