2012-04-23 6 views
2

У меня есть приложение Java swing, которое подписывается на множество данных и отображает эти данные различными способами. При большой нагрузке я столкнулся с тем, что JRE просто перестает работать с сообщением «Java (TM). Платформа SE SE перестала работать». Это явно закрывает мое приложение, и мне нужно его перезапустить. Я попытался использовать Google для устранения этой проблемы, так как я не получаю стек в моем коде или что-то, с чем я могу работать, но я нашел очень мало полезной информации, помимо обновления/повторной установки JRE и запуска сканирования вирусов. Я выполнил обе эти меры и перезагрузил сервер, но проблема все еще сохраняется. Я попытался контролировать процесс с помощью Java VisualVM (см. Дамп ниже), но я не эксперт в этом инструменте и, возможно, не знаю, что искать. Наблюдение, которое я сделал, состоит в том, что «сбои», похоже, совпадают с коллекциями мусора.Java SE двоичный сбой

Вопрос довольно прост в воспроизведении и происходит примерно через 10 минут после запуска приложения. Я не запускаю приложение с определенными параметрами jvm. Версия Java составляет 1.6.0_31 (было _25 до обновления), и я запускаю 64-разрядную версию Windows 7.

На рис. Ниже из VisualVM двоичный код Java только что прекратил работу, которая, похоже, совпадает с GC-run. Dump from Java VisualVM

Любая помощь или идеи, с тем чтобы я мог устранить или устранить проблему, очень признателен. Благодарю.

+0

Вы используете какие-либо расширения JNI? –

+0

Кажется, что GC не происходит должным образом. – kosa

+0

@DmitryOvsyanko № – hgus1294

ответ

2

Сбор мусора приостанавливает потоки приложений виртуальной машины, когда это происходит, и где-то может быть показано состояние гонки.

+0

ОК. Любые мысли о том, как я могу их устранить? – hgus1294

+0

См. Также [* ThreadCheckingRepaintManager *] (http://weblogs.java.net/blog/alexfromsun/archive/2006/02/debugging_swing.html) относительно нарушений EDT. – trashgod

3

Три вещи, чтобы проверить:

  1. Если вы реализовали метод finalize() в любом месте, убедитесь, что он не прямо или косвенно блокировать любые объекты; это может вызвать кататрофический тупик, коррелированный с GC.

  2. Если у вас есть собственный код, любое количество странных вещей может случиться, если код не использует глобальные ссылки правильно, включая взаимоблокировки и странное повреждение памяти, что снова будет коррелировать с деятельностью GC.

  3. Наконец, GC может просто «помешать горшке» и разоблачить тупики ванили, которые существуют иначе в приложении; проверьте свои протоколы синхронизации.

+0

- это сообщение - бинарный перестает работать - всегда тупик? –

+1

Это либо тупик, либо ошибка в JVM, Windows или в родной библиотеке. Он попробовал два разных паттерна уровня Java, поэтому ошибка JVM не слишком вероятна, и он не использует собственный код для комментария; так что это самая lilely либо ошибка Windows (т. е. ошибка в некоторой DLL-библиотеке Windows, используемой JVM), либо это тупик. –

+0

Спасибо. Я проверю на 1 + 3, поскольку они могут быть потенциальными кандидатами. Мне просто хотелось бы получить немного больше информации о том, где он сломается, поскольку это будет громоздко и сложно запустить приложение в режиме отладки с учетом нагрузки. – hgus1294