Как динамически контролировать размер кучи Java? - PullRequest
36 голосов
/ 29 января 2010

Я пытаюсь динамически контролировать размер кучи Java. Кто-нибудь знает, как получить максимальную память, используемую в процессе выполнения кода? Работает ли Runtime.maxMemory ()? Спасибо

Ответы [ 9 ]

28 голосов
/ 29 января 2010

maxMemory() возвращает максимальный объем памяти, который будет использовать Java. Так что это не даст вам то, что вы хотите. totalMemory() - это то, что вы ищете. См. документы

13 голосов
/ 29 января 2010

Существует большое количество доступных инструментов профилировщика, которые должны помочь вам в этом. Популярный коммерческий инструмент - YourKit , и он получает восторженные отзывы. Бесплатная альтернатива - VisualVM , которую я использовал в прошлом и которая может дать много понимания.

11 голосов
/ 28 апреля 2010
jstat -gc <pid> <time> <amount>

jstat -gc `jps -l | grep weblogic\.Server | awk {'print $1'}` 1000 3

3 образца 1 одна секунда подробнее здесь

11 голосов
/ 29 января 2010

Если вам нравится, вы можете визуально просмотреть множество значений, профилирующих ваше приложение с JConsole.

http://docs.oracle.com/javase/6/docs/technotes/tools/share/jconsole.html

Запустите ваше приложение с:

-Dcom.sun.management.jmxremote

и ваше приложение будет доступно для выбора при запуске /bin/jconsole.exe

6 голосов
/ 28 октября 2014

Я также хотел бы добавить, что jmap -heap <PID> добивается цели; это предполагает, что вы - специалист по операциям и должны знать, сколько кучи использует процесс Java. Я не могу сказать, является ли ваш вопрос программным или оперативным.

4 голосов
/ 30 января 2010

Существует также пакет java.lang.management . Используйте ManagementFactory , чтобы получить экземпляр MemoryMXBean. У него есть методы для возврата кучи и снимка использования памяти без кучи.

2 голосов
/ 09 апреля 2013

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

 JvmTop 0.4.1 alpha amd64  8 cpus, Linux 2.6.32-27, load avg 0.12
 http://code.google.com/p/jvmtop

  PID MAIN-CLASS      HPCUR HPMAX NHCUR NHMAX    CPU     GC    VM USERNAME   #T DL
 3370 rapperSimpleApp  165m  455m  109m  176m  0.12%  0.00% S6U37 web        21
27338 WatchdogManager   11m   28m   23m  130m  0.00%  0.00% S6U37 web        31
19187 m.jvmtop.JvmTop   20m 3544m   13m  130m  0.93%  0.47% S6U37 web        20
16733 artup.Bootstrap  159m  455m  166m  304m  0.12%  0.00% S6U37 web        46
1 голос
/ 14 мая 2011

Мы используем внутренние приложения xpert от OpNet для мониторинга использования кучи и утечек в реальном времени в нашей среде нагрузочного тестирования и производства. Он достаточно легкий, чтобы не влиять на продукт, поэтому мы получаем отличные данные, которые мы не можем получить из QA. Мы также выполняем профилирование методов и вызовов db в обеих средах, чтобы помочь нам выяснить, какой код / ​​sql оптимизировать. Очень классная штука с симпатичными трендовыми графиками, но не свободная ни на что. Если в вашем приложении много долларов, оно того стоит.

http://www.opnet.com/solutions/application_performance/appinternals-xpert.html

0 голосов
/ 30 января 2010

Еще одна бесплатная альтернатива - использовать Java-монитор . Взгляните на это живое демо . Просто нажмите на любой из серверов, чтобы увидеть подробные графики памяти кучи, памяти без кучи, файловых дескрипторов, пулов баз данных и многого другого.

...