Как определить узкие места с Xhprof?

У меня проблема с очень медленным вызовом API и я хочу выяснить, чем это вызвано, используя Xhprof: графический интерфейс по умолчанию и callgraph. Как эти данные должны быть проанализированы?

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

введите описание изображения здесь

введите описание изображения здесь

0

Решение

Из всех этих столбцов сфокусируйтесь на столбце 5 «IWall%».
Заметить, что send, doRequest, read, а также fgets у каждого есть 72% включительно времени настенных часов.

Это означает, что если вы взяли 100 сэмплов стека, каждая из этих подпрограмм оказалась бы на 72 из них, давай или бери, и я подозреваю, что они появятся вместе.
(Ваш график должен показать это тоже.)

Так как все это занимает 23 секунды, это означает, что около 17 секунд тратится на чтение.
Единственный способ уменьшить эти 17 секунд — это найти ненужные показания. Ты можешь?

Как насчет оставшихся 28% (6 секунд)?
Во-первых, стоит ли это того?
Даже если бы вы могли уменьшить его до нуля (всего 17 секунд, чего вы не можете), коэффициент ускорения будет 1 / (1-0,28) = 1,39 или 39%.
Если бы вы могли уменьшить его вдвое (всего 20 секунд), это было бы 1 / (1-0,14) = 1,16 или 16%.
20 секунд против 23, решать вам, стоит ли это того.

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

Так как вы ищете что-то, что занимает около 14% времени, вам придется исследовать в среднем 2 / 0,14 = 14 образцов, чтобы увидеть это дважды, и это скажет вам, что это такое.
Имейте в виду, что около 14 * 0,72 = 10 из этих образцов попадет в fgets (и всех вызывающих), так что вы можете либо игнорировать их, либо использовать их, чтобы убедиться, что все эти операции ввода-вывода действительно необходимы.
(Например, возможно ли, что вы читаете что-то дважды, по какой-то непонятной причине, будто так легче было сделать? Я видел это.)

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]