Java7 vs java5 сборка мусора
Мы планируем перенести наше корпоративное приложение, работающее в настоящее время в стеке Java5, в стек Java7. У нас возникают проблемы с неявными вызовами gc (главным образом основными gc), из-за которых система работает нестабильно в течение короткого времени (от 5 минут до 30 минут). Проанализировав статистику gc, мы обнаружили, что компактная фаза занимает достаточно много времени по сравнению с маркой и фазой развертки. Я понимаю, что сжатие является довольно сложным и требует много времени, но оно влияет на сервер приложений, который ориентирован на клиента, и на этом этапе разрывается несколько соединений.
Теперь мой вопрос: как мы переходим на Java7, есть ли лучший процесс сбора мусора по сравнению с Java5?
Серверы приложений обеспечиваются приличными системными ресурсами.
- Каждый сервер приложений содержит 32 ядра процессора
- содержит 64 ГБ оперативной памяти
- Сервер приложений - это веб-сервер IBM
- Операционная система - 64-битная IBM AIX
Как было сказано ранее, gc происходит из-за неявных системных вызовов. Нет явных системных вызовов, вызывающих gc.
3 ответа
Теперь мой вопрос: как мы переходим на Java7, есть ли лучший процесс сбора мусора по сравнению с Java5?
Обычно да, хотя как @Pushkar, вы действительно должны перейти на Java 8.
С учетом специфики вашего приложения, кажется, что вам нужно настроить / перенастроить сборку мусора на Java 5. Если вы периодически испытываете от 5 до 30 >> минут<< нестабильности из-за GC, есть что-то скорее неправильно. Текущее поведение может быть связано с вашим приложением или Websphere (например, утечки памяти, чрезмерное кеширование и т. Д.) Или из-за плохой настройки ГХ.
Короче говоря, переключение на Java 7 (или 8) может улучшить ситуацию "из коробки", но вполне вероятно, что вам придется приложить больше усилий для устранения основной причины ваших проблем.
Наконец, я бы посоветовал очевидные вещи.
Внедряйте изменения небольшими шагами. Не обновляйте свое приложение, версию websphere, версию java и т. Д. Одновременно.
Обновляйте свои серверы по одному. Имейте план отката на случай, если вы получите неприемлемую производительность.
Если возможно, сначала проверьте все это... включая тестирование производительности / нагрузки.
По умолчанию Java 7 использует параллель на компьютерах класса сервера. Если вы используете JDK 7, обновление 4 или более позднюю версию, переключитесь на сборщик мусора G1, который может повысить производительность. Но, как предположил @the8472, будет полезно узнать, какие настройки вы использовали в java 5, а теперь и в текущей среде.
Java 7 достигла конца жизни примерно в апреле 2015 года. Почему бы не перейти на 1.8?
Производительность GC обычно улучшается с основными выпусками Java (и в некоторых случаях с небольшими GC).
Вы должны обратить внимание на флаги настройки GC, следующая ссылка может помочь вам http://www.oracle.com/technetwork/articles/java/vmoptions-jsp-140102.html
http://stas-blogspot.blogspot.com/2011/07/most-complete-list-of-xx-options-for.html