Я слышал, что несколько человек утверждают, что вы не можете масштабировать размер кучи JVM. Я слышал, что практический предел составляет 4 гигабайта (я слышал, как это говорит консультант IBM), 10 гигабайт, 32 гигабайта и т.д.... Я просто не могу поверить ни одному из этих номеров и задавался вопросом о проблеме сейчас какое-то время.
Итак, у меня есть три вопроса: я надеюсь, что кто-то с опытом может ответить:
- Учитывая следующий пример, как бы вы настроили настройки кучи и GC?
- Появятся ли заметные hickup (паузы JVM и т.д.), которые будут замечены конечными пользователями?
- Должно ли это действительно работать? Я думаю, что это должно быть.
Случай:
- 64-битная платформа
- 64 ядра
- 64 гигабайта памяти
- Сервер приложений обращен к клиенту (т.е. сервер веб-приложений Jboss/tomcat). Полные паузы в JVM, вероятно, будут замечены конечными пользователями.
- Sun JVM, возможно 1.5
Чтобы доказать, что я не прошу вас, ребята, выполнить мою домашнюю работу, вот что я придумал:
-
-XX:+UseConcMarkSweepGC -XX:+AggressiveOpts -XX:+UnlockDiagnosticVMOptions -XX:-EliminateZeroing -Xmn768m -Xmx55000m
- CMS должна уменьшать количество пауз, хотя это связано с накладными расходами. Другие настройки для CMS, по-видимому, автоматически устанавливаются на количество процессоров, поэтому они кажутся мне здравомыслящими. Остальное, что я добавил, - это дополнительные функции, которые могут быть хорошими или плохими в целом для производительности, и они, вероятно, должны быть протестированы.
- Определенно.