Статьи

Простое руководство по пониманию профилей ресурсов в приложениях Java

Эта заметка описывает несколько простых команд о том, как просмотреть использование ОЗУ и ЦП вашего Java-процесса. Он содержит краткие указания о том, как определить влияющие параметры и как их настроить.

объем памяти

Java Heap

Размер кучи вашего Java-процесса можно контролировать с помощью комбинации –Xmx и –Xms.
Размер кучи, используемый в любой момент времени, и поведение сборщиков мусора можно понять, проанализировав вывод аргумента –verbose: gc в JVM.

Пожалуйста, смотрите:
http://java.sun.com/docs/hotspot/gc5.0/gc_tuning_5.html (раздел 3.2)

Родная память

Это оперативная память, которую java-процесс использует в собственной системе.
На Solaris простая команда предоставит эту информацию.

ps -eo "user pid rss time comm"  | grep java

(RSS — «Размер резидентного набора» процесса, в килобайтах)

Например, в нашем сценарии мы поняли, что, хотя максимальная куча в java была установлена ​​на 64M (-Xmx), используемая в Solaris оперативная память составляла ~ 120M.

В некоторых случаях объем оперативной памяти, используемой процессом Java, в 6 раз превышает указанный размер кучи Java для различных версий Unix.

Пожалуйста, смотрите:
man ps
http://en.wikipedia.org/wiki/Resident_set_size

ЦПУ

В длительном Java-процессе вас заинтересует совокупное время процессора.

ps -eo "user pid rss time comm"  | grep java

Здесь «время» покажет вам
совокупное время процессора, использованное с момента запуска процесса.

Это может быть выполнено через регулярные промежутки времени или по мере необходимости, чтобы понять использование ЦП при использовании / вызове процесса Java.

(Это будет особенно важно в сценариях, когда вы переходите на Java, когда Java кажется слишком загруженным процессором по сравнению с C / C ++).

Инструменты Java

Есть несколько инструментов, связанных с Java. Некоторые из них могут быть легко использованы, чтобы помочь вам:

JStack

jstack печатает трассировки стека Java потоков Java для данного процесса Java.
Вы можете использовать это, чтобы получить представление о том, что происходит в вашем Java-процессе, какие классы Java загружаются и так далее.
Пожалуйста, смотрите:
http://java.sun.com/j2se/1.5.0/docs/tooldocs/share/jstack.html
http://java.sun.com/j2se/1.5.0/docs/tooldocs/share/ jps.html

Jmap

Jmap показывает вам нативные библиотеки, используемые в вашем процессе Java.
Пожалуйста, смотрите:
http://java.sun.com/j2se/1.5.0/docs/tooldocs/share/jmap.html

другие

См. Список инструментов Java по адресу http://java.sun.com/j2se/1.5.0/docs/tooldocs/
(см. Раздел «Инструменты мониторинга и управления» и «Инструменты устранения неполадок»).

Варианты JVM

Есть несколько вариантов JVM. Полный список:
пожалуйста, смотрите:
http://java.sun.com/javase/technologies/hotspot/vmoptions.jsp

Здесь обсуждаются только параметры «-server» и «-client».
В нашем сценарии мы увидели улучшение использования ОЗУ и ЦП примерно на 33%, когда мы использовали опцию «-client» по сравнению с «-server».
Однако, какой вариант использовать, будет зависеть от вашего конкретного сценария. Вопросы, которые следует учитывать, включают размер компонента, используемые библиотеки, характеристики использования (например, длительное выполнение, как в демоне, или одноразовое использование в качестве клиента). Это также может произойти методом проб и ошибок при использовании или моделировании рабочей среды компонента.

Примерно теория об использовании любого из двух:

Опция –client оптимизирована для быстрого запуска процесса Java. Он выполняет приложение как байт-код.

Опция –server оптимизирована для наилучшего использования ресурсов, доступных на компьютере уровня сервера. Что касается приложения, оно отмечает использование и в конечном итоге компилирует байт-код в собственный исполняемый файл. Таким образом, в долгосрочной перспективе он превосходит эталон производительности клиента.

Поэтому для быстрого запуска и меньшего количества ресурсов используйте параметр –client. Если доступно больше ресурсов и требуется более высокая производительность в долгосрочной перспективе, используйте параметр –server.
Это теория, но вам придется самостоятельно проверять поведение вашего приложения.

Пожалуйста, смотрите обсуждение на
http://www.velocityreviews.com/forums/t130082-difference-between-client-server-classic-and-hotspot-jvms.html

Факторы, влияющие на использование ресурсов

Приведены некоторые примеры факторов, влияющих на эти параметры.

  • Как мы видели выше, используемый процессор и оперативная память значительно различаются в зависимости от используемых параметров JVM.
  • Используемые библиотеки. Например, мы заметили существенную разницу между использованием драйверов типа 2 и 4 для подключения к базе данных. (Драйвер типа 2 был дороже как с точки зрения процессора и оперативной памяти)
  • Естественно, операции, которые выполняет приложение. В нашем случае мы отметили, что IO для файловой системы занимал огромное количество процессоров. (В этом случае запись в файл журнала. Если вместо этого вы можете перенаправить стандартный вывод в файл журнала, ЦП для этого действия не будет привязан к вашему компоненту :))
  • Очень интересно, что даже простой Java-процесс будет потреблять процессор. Пожалуйста, смотрите интересную заметку по этому вопросу. http://blogs.sun.com/nickstephen/entry/java_why_does_my_jvm

Резюме

После настройки и настройки вашего Java-приложения в JVM вам все равно нужно задуматься о том, как оно работает в собственной (Unix) среде. В этой заметке делается попытка дать некоторые указания о том, с чего начать и на что обратить внимание. Надеюсь, это будет полезно.

С http://viralpatel.net