2009-06-04 7 views
8

Я работаю над оптимизацией своего сайта, и у меня были медленные запросы MySQL в течение нескольких дней, но после прохождения> 260M запросов он регистрировал только 6 медленных запросов, а те были выполнены мной PhpMyAdmin. Я задаюсь вопросом, есть ли что-то, чтобы регистрировать медленное время выполнения страницы PHP, чтобы я мог найти определенные страницы, которые используют ресурсы hogging, а не конкретные запросы.PHP-эквивалент медленного журнала запросов MySQL?

+0

Может быть, PhpMyAdmin запросы с низким приоритетом, что может вызвать их, чтобы показать, как «медленный» – karim79

+0

я просто упомянуть, что сказать что ни один из них не был запрошен на сайте. –

+2

Если вы хотите более точные измерения, чем в принятом ответе, чтобы найти, где находится документ, ваше узкое место - вы можете проверить Benchmark от PEAR. Это позволяет вам указать маркеры в вашем коде, чтобы найти шею бутылки. –

ответ

10

Во-первых, есть xdebug, у которого есть профилировщик, но я бы не использовал его на производственной машине, так как он вводит код и привносит скорость в сканирование. Тем не менее, это очень хорошо подходит для тестирования.

Если вы хотите измерить скорость в продуктивной среде, я бы просто измерил вручную. microtime() - функция для этих вещей в PHP. Предполагая, что у вас есть header.php и footer.php, которые вызываются с помощью всех скриптов:

# In your header.php (or tpl) 
$GLOBALS['_execution_start'] = microtime(true); 

# In your footer.php (or tpl) 
file_put_contents(
    '/tmp/my_profiling_results.txt', 
    microtime(true) - $GLOBALS['_execution_start'] . ':' . print_r($_SERVER, true) . "\n", 
    FILE_APPEND 
); 
+0

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

+0

О, одна вещь, чтобы добавить к этому. FILE_APPEND следует добавить в качестве флага, поэтому вы не просто получите самый последний доступ в журнале. –

+0

Thx, я всегда забываю это :) – soulmerge

4

Вы можете обернуть ваши сценарии в простой таймер, например:

/*in your header or at the top of the page*/ 
$time_start = microtime(true); 

/* your script goes here */ 

/*in your footer, or at the bottom of the page*/ 
$time_end = microtime(true); 
$time = $time_end - $time_start; 
echo "It took $time seconds\n"; 

Обратите внимание, что добавит две функции казни и крошечную математики, как накладные расходы.

1

Могли бы вы не зарегистрировать функцию отключения, которая вызывает конец таймера? http://us3.php.net/register_shutdown_function Таким образом вам нужно только запустить таймер, где бы вы ни думали, что может возникнуть проблема.

5

насчет auto_prepend_file и auto_append_file, просто написал сообщение о том, что http://blog.xrado.si/post/php-slow-log

+0

это правильный пост? http://blog.xrado.si/post/php-slow-log –

+0

да, у меня есть новый домен – xrado

1

Если вы используете FastCGI для выполнения ваших PHP скриптов вы можете использовать Менеджер FastCGI Process (FPM, PHP-FPM), который также поддерживает так называемый «медленный».

Вы можете включить его в php-конфигурации вашего php-fpm (для debian это в /etc/php5/fpm/pool.d/www.conf) с настройками конфигурации: request_slowlog_timeout и slowlog.

request_slowlog_timeout

Таймаут для обслуживания одного запроса, после которого PHP трассировка будет сброшена в «» slowlog файла. Значение «0» означает «Выкл.». Доступные единицы: s (econds) (по умолчанию), m (inutes), h (наш) или d (ays). Значение по умолчанию: 0.

slowlog

Файл журнала для медленных запросов. Значение по умолчанию: # INSTALL_PREFIX #/log/php-fpm.log.slow.

из http://php.net/manual/en/install.fpm.configuration.php

Также смотрите: http://php.net/manual/en/install.fpm.php и http://rtcamp.com/tutorials/php/fpm-slow-log/

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