Найти в Дзене
За сценой жизни

Docker’изация java приложений.

Большинство Java разработчиков размещают java приложение в виртуальных средах, таких как Docker. Плохо это или хорошо зависит от приложения созданного java разработчиком. В основном, разработчики или девопсы даже не задумываются о настройке Docker, операционной системы и jvm. Написал один раз yaml и дальше пайпланишь в автоматическом режиме. Вот пример. Один из проектов, попавших на переработку, потому что был очень медленный в промышленной эксплуатации, а на машинах разработчиков естественно «летал». Каждый разработчик считал обязательным создать в своей части кода многопоточную реализацию класса ForkJoinPool. В промышленной среде было несколько многоядерных серверов. На каждое физическое ядро устанавливался свой Docker образ c размещённым в нем *nix, jvm и соответственно самим приложением. Но ведь Docker имел всего одно ядро, встроенный *nix был настроен «по умолчанию», и даже jvm не была сконфигурирована для работы на одном виртуальном ядре. Память jvm на ноутбуке разработчика и па

Большинство Java разработчиков размещают java приложение в виртуальных средах, таких как Docker. Плохо это или хорошо зависит от приложения созданного java разработчиком. В основном, разработчики или девопсы даже не задумываются о настройке Docker, операционной системы и jvm. Написал один раз yaml и дальше пайпланишь в автоматическом режиме.

Вот пример. Один из проектов, попавших на переработку, потому что был очень медленный в промышленной эксплуатации, а на машинах разработчиков естественно «летал».

Каждый разработчик считал обязательным создать в своей части кода многопоточную реализацию класса ForkJoinPool. В промышленной среде было несколько многоядерных серверов. На каждое физическое ядро устанавливался свой Docker образ c размещённым в нем *nix, jvm и соответственно самим приложением. Но ведь Docker имел всего одно ядро, встроенный *nix был настроен «по умолчанию», и даже jvm не была сконфигурирована для работы на одном виртуальном ядре. Память jvm на ноутбуке разработчика и память в Docker образе -это совершено неконтролируемый был параметр. Разработчик даже не указывал конфигурацию памяти для jvm необходимую для его кода. И то, что в Docker по умолчания, совершенно не подходит для jvm по умолчанию. Ну и естественно проблемы с GPU. Если на ноутбуке разработчика есть современный набор графических процессоров или процессоров с расширенным количеством инструкций процессора, то в промышленной среде редкий сервер работает на GPU (пока еще).

Итого. Многопоточная система, нормально работавшая на ноутбуках разработчиков, не работала на однопоточном Docker образе на сверхмощном сервере с 96 ядрами с огромным количеством памяти.