Рубрики
Без рубрики

Graal VM родной, еще не совсем там

Введение Я написал пару постов о GraalVM здесь, на dev.to : Создание собственного CL… Помеченный java, graal vm, jdk.

Я написал пару постов о GraalVM здесь, на dev.to: Создание собственного интерфейса командной строки с помощью Kotlin и GraalVM и создание собственного приложения ktor с помощью GraalVM

Существует множество статей, восхваляющих GraalVM за то, как быстро запускаются приложения и как мало памяти он использует, и все это правда. Однако обычно вы не видите, чтобы люди говорили о компромиссах.

Недавно я запустил приложение micronaut для подключения к mysql и представления данных через контроллер rest. Простое, но немного больше, чем приложение типа hello world. Скоро я опубликую полный пост и исходный код.

Так что, если вы просто посмотрите на одни только улучшения скорости, это довольно захватывающе:

Вот мое приложение, работающее как jar

20:42:29.364 [main] INFO  io.micronaut.runtime.Micronaut - Startup completed in 2085ms. 
Server Running: http://localhost:8080

И здесь он работает как родной образ:

20:41:09.832 [main] INFO  io.micronaut.runtime.Micronaut - Startup completed in 37ms. 
Server Running: http://localhost:8080

Однако создание приложения – это не что иное, как болезненное занятие. Есть много подводных камней, когда дело доходит до нативных приложений. Инструментарий, безусловно, улучшается, но вам все равно нужно быть очень осторожным с отражением (в этом вопросе micronaut – такое благословение по сравнению, например, с Spring).

Просто посмотрите, сколько памяти требуется для компиляции этого простого приложения на моем ноутбуке (MacBook Pro 2017 года 16 ГБ оперативной памяти).:

[micronaut-graal:1288]    classlist:   9,486.18 ms,  1.47 GB
[micronaut-graal:1288]        (cap):   3,953.01 ms,  1.47 GB
[micronaut-graal:1288]        setup:   5,767.97 ms,  1.47 GB
[micronaut-graal:1288]   (typeflow): 161,511.61 ms, 12.77 GB
[micronaut-graal:1288]    (objects): 164,768.04 ms, 12.77 GB
[micronaut-graal:1288]   (features):   9,852.69 ms, 12.77 GB
[micronaut-graal:1288]     analysis: 352,973.84 ms, 12.77 GB
[micronaut-graal:1288]     (clinit):   7,207.49 ms, 12.78 GB
[micronaut-graal:1288]     universe:  24,093.15 ms, 12.78 GB
[micronaut-graal:1288]      (parse):  19,852.03 ms, 12.79 GB
[micronaut-graal:1288]     (inline):  23,210.25 ms, 12.79 GB
[micronaut-graal:1288]    (compile):  56,323.43 ms, 12.80 GB
[micronaut-graal:1288]      compile: 111,321.81 ms, 12.80 GB
[micronaut-graal:1288]        image:  12,677.21 ms, 12.80 GB
[micronaut-graal:1288]        write:   4,104.11 ms, 12.80 GB
[micronaut-graal:1288]      [total]: 521,240.14 ms, 12.80 GB

Моя цель с помощью этого приложения состояла в том, чтобы запустить его как бессерверное приложение в Google Cloud Run. Поэтому мне пришлось создать контейнер docker и поместить его в gcr.io . И поскольку мне нужно было создать образ linux, а не OSX, я использовал Google Cloud Build, проблема в том, что при этом происходит сбой облачной сборки, обычный экземпляр не может обрабатывать 13 ГБ памяти, запрошенной контейнером, поэтому мне пришлось его усилить: gcloud builds submit-highcpu-32

Прежде чем даже писать о приложении или о том, какую скорость я смог выжать из java-приложения, я думаю, важно посмотреть, сколько времени вы, как разработчик, потратите на решение проблем с отражением или ожидание завершения этапов компиляции.

У Graal VM многообещающее будущее, и я надеюсь на это, просто, возможно, еще не готов к прайм-тайму.

Счастливого кодирования

Оригинал: “https://dev.to/viniciusccarvalho/graalvm-native-not-quite-there-yet-4apb”