Невозможно профилировать JBoss 5 с помощью jvisualvm - PullRequest
3 голосов
/ 11 января 2011

Я получаю некоторые java.lang.OutOfMemoryError: GC overhead limit exceeded ошибки при запуске моего Java-приложения в одночасье:

java.lang.OutOfMemoryError: Java heap space
Dumping heap to java_pid6376.hprof ...
Heap dump file created [512149941 bytes in 23.586 secs]
23:34:52,163 WARN  [HDScanner] Scan failed
java.lang.OutOfMemoryError: Java heap space
23:34:52,298 ERROR [ContainerBase] Exception invoking periodic operation: 
java.lang.OutOfMemoryError: Java heap space
23:34:52,321 ERROR [JIoEndpoint] Socket accept failed
java.lang.OutOfMemoryError: Java heap space
    at java.net.ServerSocket.accept(Unknown Source)
    at org.apache.tomcat.util.net.DefaultServerSocketFactory.acceptSocket(DefaultServerSocketFactory.java:61)
    at org.apache.tomcat.util.net.JIoEndpoint$Acceptor.run(JIoEndpoint.java:310)

Если я открою jvisualvm, я вижу, что я действительно изпространство кучи:

monitor

Я хотел бы профилировать его, чтобы попытаться выяснить, что происходит - есть ли утечка памяти? и т. д. Однако,Я не могу заставить профайлера jvisualvm что-либо делать вообще.На вкладке Profiler отображается предупреждение о включении общего доступа к классам:

profiler

... хотя я добавил флаг -Xshare:off вАргументы моей виртуальной машины:

overview

Итак,

  • Есть идеи о том, как заставить профилирование работать?
  • Стоит ли игратьс G1GC вместо ... какой бы GC я сейчас не использовал?

1 Ответ

4 голосов
/ 21 января 2011

Мне кажется, что вы используете VisualVM на 32-битной JVM, а ваш JBoss работает на 64-битной JVM.В такой ситуации профилировщик и другие вещи, такие как мониторинг потоков и процессоров, не работают в Windows из коробки.С профилировщиком вы сталкиваетесь с ошибкой # 273 , где профилировщик неправильно включен.Вы должны сделать следующее:

  1. Загрузить последнюю 64-разрядную версию JDK (в настоящее время JDK 6u23).Он также содержит последнюю версию Java VisualVM
  2. . Используйте сэмплер памяти в VisualVM (он имеет намного меньшую нагрузку, чем профилирование), чтобы увидеть, можете ли вы обнаружить проблему.
  3. Если это не поможет,взгляните на дамп кучи и попытайтесь выяснить, что происходит.
  4. Выполните профилирование памяти вашего сервера JBoss.См. Профилирование с VisualVM, часть 1 и Профилирование с VisualVM, часть 2 для получения дополнительной информации о профилировщике в VisualVM.
...