2009-09-23 3 views
3

Я пытаюсь установить проблему утечки памяти для моей автономной программы Java, которая работает в unix. У меня есть настройка портов и параметров, так что я могу подключиться к нему с помощью JMX с JConsole или VisualVM.Есть ли удаленный профилировщик для Java? (который использует JMX предпочтительно)

Это немного помогает, но, к сожалению, он не говорит вам, куда пропала память, и только говорит вам, сколько памяти используется. Я ищу более подробный профилировщик, чтобы помочь мне найти объекты, которые поглощают мою память. У кого-нибудь есть идеи? Предпочтительно, когда речь идет о порте JMX, поэтому мне не нужно переконфигурировать программу. Благодаря!

+0

@erotsppa: Ваши прошлые вопросы, похоже, содержат немало хороших ответов. Могу ли я предложить вам пересмотреть их и принять наилучший ответ там, где это необходимо? –

ответ

0

Я посмотрел на несколько и как YourKit больше всего.

Он был самым простым в использовании и отлично работает с JMX.

+0

Я только что загрузил Yourkit, и он не работает с JMX. Это требует моего автономного выполнения ручной настройки, которая недокументирована и очень сложна! – erotsppa

+0

Прошу прощения, что вы не могли заставить его работать с JMX. –

+0

Можете ли вы дать мне указания о том, как подключиться к JMX? Разве это невозможно? – erotsppa

0

Ум ... на самом деле, VisualVM имеет excellent memory profiler, который может рассказать вам не только о том, какие объекты есть ваша память, но и о том, где они (возможно, нечаянно) ссылаются.

Просто нажмите кнопку «Куча дампа» на вкладке «Монитор» и поразите!

+0

Куча дампа не работает для удаленного JVM – erotsppa

+0

Хм, это позор. Вы не можете запустить VisualVM на одном компьютере? –

+0

в этом случае просто используйте jmap из командной строки, чтобы свалить кучу, а затем проанализируйте ее на любой машине, которую хотите. –

3

Если машина в вопросе установки в X11 клиентские библиотеки, и достижимая сервер SSH, который позволяет перенаправление X11, и сервер X11 работает на локальной машине (возможно http://sourceforge.net/projects/xming/) И вы используете Sun Java 6u10 или более поздней версии, вы можете использовать ssh (с -X или -Y) в поле Linux и запустить jvisualvm там, показывая свой GUI-интерфейс на вашем локальном компьютере.

Выполнение на той же машине позволяет jvisualvm напрямую подключаться к запущенному Java-процессу, а не выполнять все виды конфигурации voodoo.