Эта заметка описывает несколько простых команд о том, как просмотреть использование ОЗУ и ЦП вашего 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) среде. В этой заметке делается попытка дать некоторые указания о том, с чего начать и на что обратить внимание. Надеюсь, это будет полезно.