Производительность java на серверах с процессором Niagara ( UltraSPARC T1/T2/T3 )

Эта bug’а известна с момента появления первого процессора Niagara но до сих пор большое количество java приложений испытывают проблемы с производительностью.
В чем суть проблемы?
Некоторые параметры зависят от типа оборудования. К примеру JVM выбирает тип сборщика мусора в зависимости от “железа”.
При старте JVM определяет что в сервере на базе Niagara много “процессоров”, а значит это сервер и в случае если тип gc не установлен в опциях то будет использоваться параллельный сборщик мусора. Этот GC создает несколько потоков. Количество потоков зависит от количества процессоров. ( Как я понимаю на текущий момент правильная формула такова : (ncpus <= 8) ? ncpus : 3 + ((ncpus * 5) / 8) )
Таким образом на сервере с процессорами Niagara у вас будет множество потоков GC. На самом деле это не проблема если запущено не много JVM’ов.
Но в случае если ваше приложение использует большое количество JVM’ов или же, к примеру, вы используете этот сервер для консолидации java приложений, то накладные расходы на столь значительное количество потоков может оказаться катастрофическим.
Недавно я видел сервер T5440 на котором было запущено 74 JVM. И этот сервер периодически странным образом “зависал”.
Да, это bug . Но и сейчас большое количество приложений использует старую версию JVM. И некоторые из этих приложений испытывают странные проблемы с производительностью…
Решение проблемы очень простое. Вы можете самостоятельно выставить количество потоков GC :

-XX:ParallelGCThreads= N

Для большинства приложений 4 будет хорошим значением для N .
Эта опция может не только решить проблему с производительностью но и высвободить часть ресурсов сервера.

Leave a Reply

Your email address will not be published. Required fields are marked *