2013-02-27 2 views
1

Внешние инструменты дают мне проблемы. Есть ли способ получить простое использование процессора/время, затрачиваемое на каждую функцию, без использования какого-либо внешнего инструмента gui?Есть ли способ профилировать приложение Java без использования внешнего инструмента?

Я пробовал профилировать свою программу java с помощью VisualVM, но у меня ужасные, сокрушительные души, амбициозные результаты убийства. Он будет показывать только использование кучи, меня интересует использование ЦП, но эта панель просто говорит, что для этой JVM не поддерживается. Не говорит мне, какой JVM использовать, кстати. Я загружаю JDK 6 и запускаю его с помощью этого, я убедился, что моя программа нацелена на одну и ту же виртуальную машину, но ничего! Тем не менее, бесполезное сообщение об ошибке. Мои потребности довольно просты. Я просто хочу узнать, где программа тратит свое время. Python имеет отличный встроенный профилировщик, который распечатывает время, затрачиваемое на каждую функцию, как с каждым звонком, так и с использованием всех форматов времени. Это действительно степень того, что я ищу сейчас. У кого-нибудь есть предложения?

+0

Я не вижу для вас никакого способа сделать это *** без *** внешнего инструмента. Вы действительно ищете только это или просто рекомендации для тех, кто будет делать то, что вы просите, которые не являются VisualVM? – sharakan

+0

@sharakan - Хорошо, я соглашусь на то, что работает. Я надеялся на что-то «pythonic», где 'main()' является аргументом для профилировщика, который затем просто выполняет программу и распечатывает результаты, но если такой вещи не существует, я открыт для предложений для любых работ. –

+0

Возможное обходное решение с использованием плагина visualvm: http://stackoverflow.com/questions/1755819/cpu-and-profiling-not-supported-for-remote-jvisualvm-session – sharakan

ответ

2

Это некрасиво, но вы можете использовать встроенный механизм профилирования hprof, добавив переключатель в командную строку.

-Xrunhprof:cpu=times 

Существует много вариантов; см. страницу документации Oracle для HPROF для получения дополнительной информации.

Так, например, если у вас исполняемый банку, что вы хотели в профиль, можно ввести:

java -Xrunhprof:cpu=times -jar Hello.jar 

Когда прогон завершится, вы будете иметь (большой) текстовый файл с именем «Java. hprof.txt».

Этот файл будет содержать кучу интересных данных, но часть, которую вы ищете, является та часть, которая начинается:

CPU TIME (ms) BEGIN (total = 500) Wed Feb 27 16:03:18 2013 
rank self accum count trace method 
    1 8.00% 8.00% 2000 301837 sun.nio.cs.UTF_8$Encoder.encodeArrayLoop 
    2 5.40% 13.40% 2000 301863 sun.nio.cs.StreamEncoder.writeBytes 
    3 4.20% 17.60% 2000 301844 sun.nio.cs.StreamEncoder.implWrite 
    4 3.40% 21.00% 2000 301836 sun.nio.cs.UTF_8.updatePositions 

В качестве альтернативы, если вы еще не сделали этого, я хотел бы попробовать установить VisualVM-Extensions, VisualGC, Threads Inspector и, по крайней мере, Swing, JVM, Monitor и Jvmstat Tracer Probes.

Перейти к Инструменты-> Плагины для их установки. Если вам нужна дополнительная информация, комментарий, и я продолжу этот ответ.

+0

Arg .. Я не понимаю. Я попытался использовать ваше предложение, а также несколько из вашего сир, с которым вы связались, и все, что он когда-либо говорил, - это «Сбрасывание использования ЦП путем выборки текущих потоков ... done». –

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