2011-01-13 1 views
0

Я расширил программу просмотра геномики с некоторыми функциями, запрошенными Лабораторией Джонса Хопкинса. Когда я запускаю приложение из командной строки, у меня, похоже, нет проблем с памятью - приложение было запущено с -Xmx750m. Тем не менее, когда я запускаю же приложение в качестве веб-запуска приложения со следующими параметрами кучи:Сбой приложения для веб-браузера Java с OutOfMemoryError

<java initial-heap-size="67108864" max-heap-size="1205862400" version="1.5+"/> 

через некоторое время приложение падает с OutOfMemoryError таким образом:

ERROR [2011-01-12 16:28:22,437] [DefaultExceptionHandler.java:42] [AWT-EventQueue-0] Unhandled exception 
java.lang.OutOfMemoryError 
at java.util.zip.Inflater.init(Native Method) 
at java.util.zip.Inflater.<init>(Unknown Source) 
at java.util.zip.Inflater.<init>(Unknown Source) 

Там нет никакой разницы между приложение для локального приложения и веб-старта, за исключением того, что я подписал банки, которые вызывают в файле jnlp для веб-запуска. Я попытался подключиться к приложению веб-старта с помощью JConsole и профилировщика MyKit Java. В каждом случае я включил свойство HeapDumpOnOutOfMemoryError, вызвав операцию setVMOption для MBean HotSpotDiagnostic; но при сбое приложения не создается дамп кучи.

Мне кажется, что авария связана с запуском под веб-запуском. Я очень старался вызвать OutOfMemoryError для настольного приложения - уменьшив память (-Xmx250m); это приводит к приостановке приложения в течение длительных периодов времени (до 5 минут), пока, предположительно, сбор мусора. Но приложение всегда возобновляется после паузы - никогда не сбой.

Может ли кто-нибудь сказать мне способ захвата кучи-дампа в OutOfMemoryError под веб-запуском? Хотя, я подозреваю, что на самом деле у меня может не хватить кучи. Но, по крайней мере, это будет место для начала.

Я нахожусь в конце своего ума - любая помощь будет принята с благодарностью.

Я запускаю Java 1.6.0_20-b02 на Windows XP-SP2.

+2

Любая конкретная причина, по которой вы не используете обновленную версию Java? –

+0

Нет. Считаете ли вы, что это может помочь? Кроме того, когда приложение для веб-старта используется другими людьми, оно может быть слишком ограничительным, чтобы требовать «последнюю» версию Java. Однако, если запуск последней версии может помочь мне изолировать и исправить мою проблему, это определенно стоит попробовать. Знаете ли вы о каких-либо инструментах/функциях в более поздних версиях, которые помогли бы уменьшить эту проблему? Благодаря! –

ответ

0

Я также видел это в своем приложении. В моем случае это было вызвано поврежденными JAR. Попробуйте, если подписанные банки все еще действительны (попробуйте открыть их в winzip или другом инструменте zip - мой любимый CTRL + PGDOWN в TotalCommander ;-)

0

Я только что установил очень похожий вопрос вчера, который я разрешил, позвонив Deflater.end() (см. this для дополнительной информации). Я получал исключения OutOfMemoryError во время сериализации, но по какой-то причине только при развертывании в качестве веб-старта - я не мог дублировать проблему в Eclipse или исполняемом банке, независимо от Xmx.

Смежные вопросы