Назад | Перейти на главную страницу

Приложение Java работает медленно на виртуальном сервере (KVM)

У меня есть веб-приложение Java, которое запускается из JAR, запускает встроенный Tomcat и использует Spring Boot.

Проблема в том, что он работает очень медленно при работе в виртуальной гостевой системе KVM. То же приложение в том же JDK (Java(TM) SE Runtime Environment (build 1.8.0_72-b15) Java HotSpot(TM) 64-Bit Server VM (build 25.72-b15, mixed mode) запускается 8 секунд на голом железе, но 40 секунд в виртуализированной системе. Обе ОС - Ubuntu 15.10 (ядро 4.2.0-27-generic). И это не только проблемы с запуском, приложение очень лениво отвечает на каждый HTTP-запрос.

Я пытался изменить настройки Java для SecureRandom, но ничего не изменилось.

-Djava.security.egd=file:///dev/urandom

SecureRandom и случайная энтропия в виртуальных гостях: https://security.stackexchange.com/questions/14386/what-do-i-need-to-configure-to-make-sure-my-software-uses-dev-urandom

https://stackoverflow.com/questions/137212/how-to-solve-performance-problem-with-java-securerandom

Но мне это не помогло. У вас есть другие рекомендации, что делать? Спасибо.

Мой виртуальный хост - это новый сервер с большим количеством ОЗУ, SSD ... так что я совершенно уверен, что проблем с оборудованием нет. Я также использую других виртуальных гостей KVM, и никаких проблем. Только с медленным Java-приложением.

Если ваше приложение использует SecureRandom, вам может потребоваться установить генератор случайной энтропии, например haveged так что энтропии достаточно для начального семени.

У виртуальных машин проблема со сбором энтропии.

Виртуальные серверы работают в эмулируемой среде с очень ограниченным доступом к «реальному» оборудованию. Случайные данные, которые обычные компьютеры получают от своего оборудования, не происходят с эмулированным виртуальным оборудованием, поэтому первичный источник энтропии просто отсутствует.

Источник

По крайней мере, можно ожидать, что это улучшит производительность при первом использовании.