Мы замечаем, что у нашего клиента, работающего под управлением Solaris 10, постоянный GC увеличивается с 50% до 97% емкости.
Произошло ли существенное изменение кода в приложении вашего клиента дозаметили всплеск в Перми?Или это всегда было так (от 50% до 97%)?
Полагаю, на данный момент это не имеет большого значения, но в некоторых случаях подобные пики должны обнаруживаться во время тестирования системы (при условии, что ваша команда видна в цикле тестирования системы ваших клиентов.)
Одно можно сказать наверняка, что работа на 97% слишком близка к максимальной для комфорта, и вам придется играть с максимальнойпараметры perm gen (и, как следствие, с другими параметрами кучи ... скорее всего.)
Эта JVM использовала значение по умолчанию "permgen" (мы НЕ передавали какой-либо пользовательский флаг Permgen вJVM).
Не очень хорошая идея.Вы должны (прочитайте должны) всегда характеризовать ваши (или ваши клиенты) приложения перед развертыванием.Либо ваши клиенты должны сообщить вам, какие параметры им нужны, либо ваша команда должна определить их во время UAT и циклов тестирования системы (при условии, что у вас есть наглядность для них; см. Выше.)
Должны ли мы думать, что в ближайшее время, это может сделать OutOfMemoryError?
Это не неизбежно, но это возможно (особенно если приложение еще не подверглось максимально возможной загрузке.) Это также возможно, еслиспайк - недавнее явление.В этом случае, скорее всего, из-за изменения кода или ранее неизвестного состояния из-за других факторов (исправление в ОС, в контейнере, изменение трафика клиента, изменение в БД и т. Д.)
Вместо того, чтобы использовать в производственном пространстве 97% permgen, следует ли нам устанавливать более высокое значение PermGen?
IMO, да.Если вы (или ваш клиент) можете охарактеризовать или оценить требования к памяти приложения (как перманентной, так и кучи) (а также текущий и возможный будущий трафик), вы должны на всякий случай предоставить себе маржу в 10% -20%.Все, что меньше, это просто игра с огнем.Все, скорее всего, будет расточительным.
Память может быть дешевой, но производительность и стабильность приложений - нет;)
Если вы не используете visualgc, вам следует.Это хороший инструмент для визуальной проверки того, что происходит с различными сегментами в вашей памяти JVM.Существует также visualvm, который является более мощным и универсальным, однако представление показаний пользовательского интерфейса visualgc особенно подходит для этой задачи.
PS: мы используем JDK 1.6.0_23 на Solaris 10.
Не думаю, что это должно иметь значение.Каков контейнер вашего приложения (если ваше приложение запущено в одном из них.) Возможно, вы захотите отредактировать свое сообщение, добавив его.