Я поддерживаю приложение обмена сообщениями Java, которое требует низкой задержки (< 300 микросекунд, обрабатывающих каждое сообщение). Тем не менее, наше профилирование показывает, что виртуальная машина Sun Java сначала запускается медленно и ускоряется после первых 5000 сообщений или около того. Первые 5000 сообщений имеют латентность 1-4 миллисекунды. После примерно 5000, последующие сообщения имеют задержку ~ 250 микросекунд, со случайными выбросами.Техника или утилита для минимизации времени «разминки» Java?
Как правило, это типичное поведение для приложения Java. Однако, с точки зрения бизнеса, недопустимо сообщать клиенту, что им приходится ждать, пока JVM «разогреется», прежде чем увидит, какую производительность они требуют. Приложение должно быть «подогретая» перед первым сообщением клиента обрабатывается
JVM является ВС 1.6.0 обновление 4.
Идеи для преодоления этой проблемы:
- настройки виртуальной машины Java, такой как -XX: CompileThreshold =
- Добавьте компонент для «разминки» приложения при запуске, например, путем отправки «поддельных сообщений» через приложение.
- Статически загружать приложение и классы JDK при запуске приложения, чтобы классы не загружались из JAR при обработке сообщений клиента.
- Некоторая утилита или агент Java, который выполняет одну или обе из этих двух идей, так что мне не нужно повторно изобретать колесо.
ПРИМЕЧАНИЕ. Очевидно, что для этого решения я рассматриваю все факторы, включая микросхему, тип диска и конфигурацию и настройки ОС. Однако для этого вопроса я хочу сосредоточиться на том, что можно сделать для оптимизации приложения Java и свести к минимуму время прогрева.
Думаю, вам лучше посмотреть на причину этой первоначальной задержки. Инструменты профилирования могут помочь. – Thomas
Отправьте 5000 поддельных сообщений на сервер как часть процедуры установки и запуска. – Zed
5000 поддельных сообщений (даже если это была хорошая идея) звучит так, как будто это добавит 5-20 секунд к времени запуска приложения. –