2010-12-13 3 views
1

Я уже некоторое время разрабатываю инфраструктуру php и использую ее на 10 или около того сайтах с нашей собственной CMS.php отслеживание функции время выполнения

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

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

Я пробовал установить xdebug, но он не работал, и я даже не уверен, как он будет использоваться в любом случае.

Кто-нибудь знает, как я могу отслеживать вызовы классов и функций и даже время их?

любая помощь оценена, Дэн.

+1

вам нужен профайлер, поэтому я рекомендую вам познакомиться с x-debug –

+2

** Это не сработало ** не является допустимым описанием проблемы. Если вы не знаете, как работает XDebug, либо [просмотрите документацию] (http://www.xdebug.org/docs/), либо поместите свои проблемы в соответствующий вопрос. В любом случае, XDebug - ваш лучший выбор. – Gordon

+1

Возможный дубликат [Good Free PHP debugger?] (Http://stackoverflow.com/questions/1494288/good-free-php-debugger/1494339#1494339) – Gordon

ответ

0

Вы хотите попытаться выяснить, где происходят самые большие задержки, и не знаете, как это сделать.

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

Программа проходит дерево вызовов. Основная процедура вызывает A, затем вызывает B и т. Д. Вызов C, затем D и т. Д. Это идет по дереву вызовов, вплоть до листьев, которые являются простыми утверждениями, системными вызовами и ввода-выводами. Если все эти действия просто должно быть выполнено, программа будет как можно быстрее.

Поскольку существует задержка, некоторые из этих действий не являются абсолютно необходимыми, и для них нет необходимости в том, чтобы одна из ветвей, ведущих к ним (точки вызова), не была строго необходима.

Предположим, что ваша задержка стоит 50% времени. Затем эти точки вызова активны и в стеке вызовов в течение 50% времени. Поэтому, если вы случайно приостановите программу и отобразите стек, вероятность того, что вы увидите, составляет 50%. Если вы сделаете это 10 раз, он появится на 5 из них, более или менее.

Фактически, если вы делаете такой random pausing и проверяете стек, если точка вызова отображается только на одном образце, он ничего не сообщает. Но если он появляется на нескольких образцах, , и если это то, чего вы могли бы избежать, вы нашли задержку, и исправление сделает программу быстрее. Более того, почти нет задержки, которую вы можете исправить, что может избежать такого рода проверки.

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

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