2009-08-12 3 views
0

Работа с приложением Java консоли, я могу сделать это:Как получить несколько дампов hprof в приложении Java WebStart (JNLP)?

java -agentlib:hprof=heap=dump,format=b MyClass 

Тогда я могу ударить ctrl- \ (или Ctrl-перерыв на Windows) в любое время, я хотел бы сделать снимок кучи для последующего использования анализ.

Я хотел бы сделать то же самое для приложения Java Web Start, но я не могу заставить его работать. Я могу передать аргумент agentlib с переменной среды JAVAWS_VM_ARGS, но ввод ctrl- \ и ctrl-break в консоли, похоже, ничего не делает. Все, что я получаю, это один дамп, когда программа запускается, что не очень интересно, так как в этот момент я еще не заходил в нашу программу и выполнял транзакции, которые я хочу проанализировать.

ответ

0

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

+0

Прохладный ... это включено в Java 1.6.0_7 и более поздних версиях ... – skiphoppy

+0

К сожалению, похоже, что наш Java Web Запуск сбоя приложения при попытке профилировать его память с помощью VisualVM. – skiphoppy

1

Запустите приложение со следующими аргументами JMV, чтобы включить JMX и загрузить слушателя на порту 9004:

-Dcom.sun.management.jmxremote 
-Dcom.sun.management.jmxremote.port="9004" 
-Dcom.sun.management.jmxremote.authenticate="false" 
-Dcom.sun.management.jmxremote.ssl="false" 

Тогда взгляните на эту программу Java, которая может сделать соединение с сервером JMX и принять сброс кучи по требованию. Исходный код содержит комментарии со ссылками на 2 полезные статьи в Интернете, которые помогли мне получить все это. Удачи !

Ссылка: JmxHeapDumper.java

P.S. по-видимому, получить JMX для запуска приложения WebStart сложно, я нашел это обсуждение, надеюсь, что это поможет: http://forums.java.net/jive/message.jspa?messageID=311717