Устранение неполадок Grails / Groovy утечки памяти? - PullRequest
16 голосов
/ 03 апреля 2009

У меня есть приложение Grails, которое выполняет довольно приличное количество создания и уничтожения доменных объектов, и кажется, что оно исчерпывает пространство PermGen с очень, очень быстрой скоростью. Я сделал обычные настройки (поднял PermGen до 256M, включил GC класса и т. Д.), Но без кубиков.

Кто-нибудь захочет порекомендовать какие-нибудь (и, надеюсь, бесплатные или очень недорогие) инструменты для устранения неполадок такого рода потребления памяти в Groovy и / или Java? Или какие-то методы, которые вы используете для устранения проблем с памятью JVM?

Редактировать: это когда приложение развертывается внутри Tomcat в рабочем режиме; Я не пробовал с другими контейнерами. Тем не менее, было бы неплохо иметь некоторые ресурсы для отслеживания проблемы.

Ответы [ 7 ]

10 голосов
/ 23 апреля 2009

Вы пробовали

-XX:+CMSClassUnloadingEnabled -XX:+CMSPermGenSweepingEnabled

Вместе с увеличением обычных подозреваемых (-Xmx, -Xms, -XX:PermSize и -XX:MaxPermSize) это решило все проблемы PermGen в нашем производственном Tomcat, которые возникли довольно скоро после развертывания приложения. Никогда не видел другого исключения OOM после этого. : -)

6 голосов
/ 03 апреля 2009

Мне лично нравится VisualVM . Вокруг определенно есть более мощные инструменты, но у этого есть хорошее отношение удобства использования к мощности.

3 голосов
/ 26 мая 2011

Это также может быть полезно: http://burtbeckwith.com/blog/?p=73

2 голосов
/ 03 апреля 2009

Eclipse Memory Analyzer - это бесплатный инструмент, который по крайней мере так же хорош, как Yourkit.

1 голос
/ 03 апреля 2009

Есть ли у вас проблемы с разработкой или производством?

Если вы находитесь в процессе разработки, помните, что Grails постоянно перекомпилирует многие аспекты вашего приложения (не только изменения домена, но и изменения контроллера и другие классы). У меня тоже есть проблемы с PermGen, но большинство из них вызвано постоянной перекомпиляцией файлов, над которыми я работаю. Вы можете отключить эту функцию

http://www.grails.org/FAQ#Q:%20OMG%20I%20get%20OutOfMemoryErrors%20or%20PermGen%20Space%20errors%20when%20running%20Grails%20in%20development%20mode.%20What%20do%20I%20do?

Если вы работаете, то, очевидно, у вас гораздо более серьезная проблема. Проблемы с памятью PermGen связаны со многими платформами, на которых построен Grails, включая Spring, Hibernate и даже собственную JVM от Sun. Вы можете попробовать настроить максимальный размер кучи для вашего веб-контейнера (Tomcat или Jetty).

Вы также можете попробовать другую реализацию JVM, такую ​​как Oracle JRockit, которая, как предполагается, значительно лучше в сборке мусора и других средствах эффективности. Я никогда не пробовал сам, но так как я тоже нахожусь в процессе разработки и обширного проекта Grails, я могу сам найти решение этих проблем. Удачи!

1 голос
/ 03 апреля 2009

YourKit - хороший инструмент, который я использовал несколько раз для диагностики проблем с памятью. Это коммерческая версия, но у нее есть бесплатная ознакомительная версия, доступная для отладочной отладки.

0 голосов
/ 04 апреля 2009

Если это происходит после повторного развертывания приложения в горячем режиме несколько раз, возможно, эта ошибка Grails . FAQ по Tomcat также имеет несколько возможных причин утечки PermGen.

...