да.Я сделал это, настроив jvm для создания дампа кучи в OOM, затем спустил кучу и запустил ее через jvisualvm.Вы можете вычислить оставшиеся размеры (это заняло много времени), но вам будет очень ясно, что это за нарушитель.
Вы также можете присоединить jvisualvm к работающему экземпляру, но вам нужно настроить jvm для принятия соединения.,Таким образом, вы можете наблюдать за ростом кучи в режиме реального времени.Видеть это;это для jboss, но должно быть очень похоже: https://wiki.projectbamboo.org/display/BTECH/VisualVM+Profiler
Я думаю, что легче получить ответ после того, как у вас есть дамп кучи, хотя, когда вы смотрите его в реальном времени, вещи собираются и тому подобное.
РЕДАКТИРОВАТЬ - вот мои настройки запуска.
-XX:+PrintGCDetails -XX:+PrintGCTimeStamps
-Xloggc:/path/to/memlogs/memlog.txt -XX:+PrintTenuringDistribution
-Xms1024m -Xmx2048m -XX:MaxPermSize=128m
-server -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=xxxx
-Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false
-Djava.rmi.server.hostname=<ip-address> -XX:+HeapDumpOnOutOfMemoryError
-XX:HeapDumpPath=/path/to/heapdumps/ -XX:+CMSClassUnloadingEnabled
-XX:+CMSPermGenSweepingEnabled -XX:+UseConcMarkSweepGC
, поскольку я настроил его для удаления журналов памяти, я могу в реальном времени подключить файл memlog.txt, чтобы увидеть, что произошло.Я могу подключиться к jvm, если захочу, но, как я уже сказал, я просто проанализирую кучу после сбоя, чтобы увидеть, в чем проблема, потому что по факту ее действительно ясно ....