Я пытаюсь контролировать размер кучи java динамически. Кто-нибудь знает, как получить maxmium-память, используемую в процессе запуска кода? Делает ли Runtime.maxMemory() трюк? Благодаря
Как динамически контролировать размер кучи Java?
Ответ 1
maxMemory()
возвращает максимальный объем памяти, который будет использовать java. Так что это не даст вам то, что вы хотите. totalMemory()
- это то, что вы ищете. См. docs
Ответ 2
Имеется большое количество инструментов профилировщика, которые помогут вам в этом. Популярным коммерческим инструментом является YourKit, и он получает восторженные отзывы. Свободной альтернативой является VisualVM, который я использовал в прошлом и могу предоставить много понимания.
Ответ 3
Если вам нравится, вы можете визуально просмотреть множество значений, профилирующих ваше приложение с помощью JConsole.
http://docs.oracle.com/javase/6/docs/technotes/tools/share/jconsole.html
Запустите приложение с помощью
-Dcom.sun.management.jmxremote
и ваше приложение будет доступно для выбора при запуске/bin/jconsole.exe
Ответ 4
jstat -gc <pid> <time> <amount>
jstat -gc `jps -l | grep weblogic\.Server | awk {'print $1'}` 1000 3
3 образца 1 секунда подробнее см. здесь
Ответ 5
Я также хотел бы добавить, что jmap -heap <PID>
делает трюк; который предполагает, что вы являетесь оппонентом и вам нужно знать, сколько кучи использует Java-процесс. Я не могу сказать, является ли ваш вопрос программным или оперативным.
Ответ 6
Существует также java.lang.management. Используйте ManagementFactory, чтобы получить экземпляр MemoryMXBean
. Он имеет методы для возврата кучи и моментального снимка использования памяти без кучи.
Ответ 7
Возможно, 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
Ответ 8
Мы используем внутреннюю среду xpert от OpNet для мониторинга использования кучи и утечек в реальном времени в нашей тестовой среде и производстве. Он достаточно лёгкий, чтобы не воздействовать на prod, поэтому мы получаем отличные данные, которые мы не можем получить от QA. Мы также делаем профилирование методов и вызовов db в обеих средах, чтобы помочь нам выяснить, какой код /sql следует оптимизировать. Очень классный материал с хорошими графиками трендов, но не свободными ни на одном растяжке. Если у вас много долларов, едущих на вашем приложении, это стоит инвестиций.
http://www.opnet.com/solutions/application_performance/appinternals-xpert.html
Ответ 9
Еще одна свободная альтернатива - использовать Java-monitor. Посмотрите на живую демонстрацию. Просто нажмите на любой из серверов, чтобы увидеть подробные графики в памяти кучи, памяти без кучи, дескрипторах файлов, пулах баз данных и многом другом.