2013-05-08 3 views
3

Я пытаюсь написать программу, которая использует JMX, чтобы найти процент использования ЦП для активности GC JVM в этот момент времени (или для небольшого подмножества времени говорят 1 сек), аналогично тому, что JVisualVM. Используя JMX, я могу найти GarbageCollectionTime, когда цикл GC lasdt начался и закончился. Но пока не нашли способ конвертировать эту информацию в загрузку процессора для GC.Процент CPU, используемый GC с помощью JMX

+0

JVisualVM использует jstat API, а не JMX, чтобы отобразить CPU график использования –

ответ

0

Ну, вы не сможете найти ответ программно. GC будет использовать 100% доступного процессора. Реальный вопрос: «Сколько CPU доступно?»

  • Серийный ГХ (-XX:+UseSerialGC) будет использовать один процессор.

  • Параллельные коллекторы (-XX:+UseParallelGC, -XX:+UseParallelOldGC и -XX:+UseParNewGC) будет использовать количество CPU вы даете (-XX:ParallelGCThreads=N), или все из них, если не указан номер

  • В основном-параллельные коллекторы (-XX:+UseConcMarkSweepGC и -XX:+UseG1GC) будет использовать количество CPU вы даете (-XX:ConcGCThreads=N), или Половину из них, если не указан номер

Обратите внимание, что, с CMS и G1, вы можете установить некоторые цели к GC со следующими параметрами:

  • -XX:MaxGCPauseMillis=X будет установить максимальное время цели паузы в миллисекундах:

  • -XX:GCPauseIntervalMillis=<X> задаст минимальный интервал цели между двумя циклами GC

Источник: http://jvm-options.tech.xebia.fr/

Вы можете найти советы по разбору журналов iCMS на this page и советы по настройке GC на this page.

Надеюсь, что это поможет!

+0

Что я имел в виду, чтобы получить информацию, аналогичную той, что вы можете найти с помощью VisualVM , В данный момент времени GC использует целое ядро ​​(или больше), или это не происходит, когда я говорю, что процент больше в течение периода времени, например, процента от времени, проведенного в GC за последние 1 секунду. – Ritwaj

+0

Последовательный и параллельный GC являются STW и начинаются, когда пулы памяти заполнены, поэтому вы не можете их ограничить. Вы можете установить цели для CMS и G1, я отредактировал свой ответ с дополнительной информацией. –

0

К сожалению, эта информация недоступна через JMX (отображение IMHO VisualVM на дисплее не соответствует времени GC CPU).

Вы можете использовать jstat -gc <pid> для сбора использования центрального процессора для использования в JVM.

jstat -gc <pid> 1s будет производить что-то вроде этого

S0C S1C S0U S1U  EC  EU  OC   OU  PC  PU YGC  YGCT FGC FGCT  GCT 
6528.0 6528.0 6523.9 6528.0 52480.0 51600.0 2097152.0 1697279.8 21248.0 5647.8  39 6.873 5  11.685 18.559 
6528.0 6528.0 0.0 6528.0 52480.0 13355.5 2097152.0 1794839.9 21248.0 5649.8  41 7.322 5  11.685 19.008 
6528.0 6528.0 0.0 6528.0 52480.0 27790.8 2097152.0 1884439.9 21248.0 5649.8  43 7.646 5  11.685 19.332 
6528.0 6528.0 0.0 6528.0 52480.0 50942.9 2097152.0 1974055.9 21248.0 5649.8  46 7.969 5  11.685 19.654 
  • YGCT - процессорного времени секунды, потребляемые небольшими коллекциями с начала виртуальной машины Java
  • FGCT - процессорного времени секунд потребляемый небольшими коллекциями с начала виртуальной машины Java
  • GCT - сумма выше
0

Maybe jvmtop может помочь вам (взгляните на GC колонке)

JvmTop 0.3 alpha (expect bugs) 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 
11272 ver.resin.Resin [ERROR: Could not attach to VM] 
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 
Смежные вопросы