У меня есть метод com.acmesoftware.shared.AbstractDerrivedBean.getDerivedUniqueId(). Когда я JProfiler приложение, этот метод getDerivedUniqueId(), по сути, похоронил 80 методов, как ожидалось. Метод вызывается от имени каждого компонента в приложении. Я пытаюсь записать calltree CPU, начиная с этого метода, до листового узла (т. Е. Одного из исключенных классов).Как ограничить JProfiler до поддерева
Я попытался следующие, но это не дало ожидаемого результата:
- Найти метод выше методом целевой для профилирования, например, markForDeletion().
- набор триггером для начала записи на getDerivedUniqueId()
- шнеллером, чтобы остановить запись на markForDeletion()
я ожидал только увидеть все ниже markForDeletion(), но я видел все, вплоть до, но не ВКЛЮЧАЯ getDerivedUniqueId(), что является противоположностью моей намеченной цели. Хуже того, даже с отбором 5 мс этот триггер увеличил предыдущее время работы с 10 минут до «Я прекратил работу через 3 часа». Кажется, что триггер добавляет огромное количество накладных расходов сверху накладных расходов. Следовательно, даже если я выясню, как правильно включить триггер, добавленные накладные расходы, похоже, окажут его неэффективным.
Причина, по которой мне нужно ограничить запись только этим методом: При запуске в режиме выборки 5 мс приложение завершается через 10 минут. Когда я запускаю его в полном оснащении, я ждал 3 часа, и он все еще не завершен. Следовательно, мне нужно включить полную проверку инструмента только после того, как getDerivedUniqueId() вызывается и приостанавливает профилирование при выходе из getDerivedUniqueId().
- Обновлено/Отредактировано: Спасибо Инго Кегелю за вашу помощь. Я, вероятно, не понимаю, как использовать триггеры. В приведенном ниже коде я устанавливаю триггеры, как показано после кода. Мое ожидание заключается в том, что когда я создаю приложение (как выборочное, так и полное) с помощью приведенных ниже триггеров, если логическое значение isCollectMetrics ложно, я должен увидеть 100% или 99,9% процессора в фильтрах. Однако это не так. Кажется, что дерево CPU не учитывает триггеры. Во-вторых, когда isCollectMetrics истинно, дерево вызовов jprofiler, которое я ожидаю, будет начинаться с startProfiling() и заканчиваться на stopProfiling(). Опять же, это тоже не так.
Метод содержит() является узким местом. В итоге он вызывает один из 150 getDerivedUniqueId(). Я пытаюсь определить, какой getDerivedUniqueId() вызывает ухудшение производительности.
public static final AtomicLong doEqualContentTime = new AtomicLong();
public static final AtomicLong instCount = new AtomicLong();
protected boolean contentsEqual(final InstanceSetValue that) {
if (isCollectMetrics) {
// initialization code removed for clarity
// ..........
// ..........
final Set<Instance> c1 = getReferences();
final Set<Instance> c2 = that.getReferences();
long st = startProfiling(); /// <------- start here
for (final Instance inst : c1) {
instCount.incrementAndGet();
if (!c2.contains(inst)) {
long et = stopProfiling(); /// <------- stop here
doEqualContentTime.addAndGet(et - st);
return false;
}
}
long et = stopProfiling(); /// <------- stop here
doEqualContentTime.addAndGet(et - st);
return true;
} else {
// same code path as above but w/o the profiling. code removed for bravity.
// ......
// ......
return true;
}
}
public long startProfiling() {
return System.nanoTime();
}
public long stopProfiling() {
return System.nanoTime();
}
public static void reset() {
doEqualContentTime.set(0);
instCount.set(0);
}
Включенные Триггеры:
startProfiling триггерные:
stopProfiling триггер:
Я пытался 'Start Recordings' или кнопки 'Record CPU' отдельно только для захвата дерева вызовов
Hi. Я не понимаю вашего предложения. Разве эти шаги не похожи на то, что вы предлагаете. Можете ли вы представить подробные шаги, чтобы сузить инструментарий только до calltree, начиная с getDerivedUniqueId() и завершить задачу в разумные сроки. Благодарю. – user2943574
У вас есть точные действия в вашем триггере, как я предложил? Я не вижу этого на вашем снимке экрана. Я сделал подробные шаги для того, что вы хотите сделать. Улучшение ваших фильтров - это не то, что я могу сделать без подробных сведений о вашем приложении. –
Hi Ingo. Спасибо вам за помощь. Я обновил вопрос, включив код и снимок JProfiler. Я не могу включить дерево вызовов, поскольку оно принадлежит компании. Могу ли я отправить по электронной почте/skype вам скриншот дерева вызовов jprofiler? Спасибо. – user2943574