g632104866
V2EX  ›  Java

我把 Java 开发的 kkRepo 支持 AOT 编译, 1s 极速启动,空闲内存小于 200MB

  •  
  •   g632104866 · 13h 41m ago · 471 views

    kkRepo 是什么?

    kkRepo 是一款社区驱动、完全开源的自托管制品仓库,旨在解决 Sonatype Nexus 社区版的各类限制与痛点,为社区提供开放、可靠且可持续演进的制品管理方案。目前已支持 Maven 、npm 、PyPI 、Go 、Helm 、Cargo/Rust 、Dart/Pub 、Composer/PHP 、Terraform 、Swift Package Registry 、Docker/OCI 、NuGet 、RubyGems 、Yum 和 Raw 等制品格式。

    支持 AOT 和 JVM 双编译

    来源于 V2EX 用户的一句提醒,说 Java 启动太慢太耗内存了,于是我把 kkRepo 支持了 AOT 和 JVM 双编译,总体来说各有优劣。AOT 启动快占用资源少,JVM 的吞吐比 AOT 明显更高。现在可以自由选择了。

    启动、内存与包体积

    指标 Native JVM 说明
    创建容器到 readiness 中位数 1.037 秒 11.888 秒 Native 快 11.5 倍
    Spring 自报启动中位数 0.639 秒 9.562 秒 Native 快 15.0 倍
    5 轮 readiness 范围 1.031-1.793 秒 11.295-14.762 秒 Native 重启窗口更短
    空闲 Docker 内存中位数 170.4 MiB 315.1 MiB Native 少 45.9%
    空闲进程 RSS 134.4 MiB 327.0 MiB Native 少 58.9%
    空闲 CPU 中位数 0.32% 1.27% 两者都很低,Native 后台开销更小
    空闲线程数 40 50 Native 少 20%
    负载期间进程 RSS 峰值 218.4 MiB 389.4 MiB Native 少 43.9%
    Docker 镜像内容大小 238 MB 388 MB Native 小 38.7%
    Docker 本地磁盘占用 494 MB 796 MB Native 小 37.9%

    请求性能

    充分预热后,两种模式在单并发测试中的 P50 都约为 1 ms 。差异主要出现在持续并发阶段:完成 JIT 预热后的 JVM 通常能提供更高吞吐。

    64 并发持续负载端点 Native 请求/秒 JVM 请求/秒 JVM 吞吐变化 Native P95/P99 JVM P95/P99
    Actuator health 765 911 +19.1% 65/1006 ms 44/1032 ms
    Browse 页面 2,071 2,293 +10.7% 81/209 ms 86/147 ms
    Repositories API 2,084 3,005 +44.2% 91/102 ms 74/185 ms

    3 轮 32 并发、每轮 10,000 请求的结果也呈现相同的稳态趋势:

    • Browse 中位吞吐:Native 2,529 请求/秒,JVM 3,003 请求/秒,JVM 高 18.7%。
    • Repositories API 中位吞吐:Native 1,942 请求/秒,JVM 2,438 请求/秒,JVM 高 25.5%。
    lcingOnTheCake
        1
    lcingOnTheCake  
       13h 36m ago
    能有 graalvm 好?
    g632104866
        2
    g632104866  
    OP
       13h 26m ago
    @lcingOnTheCake 用的 Spring Native ,就是 Graalvm 了
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   971 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 68ms · UTC 20:09 · PVG 04:09 · LAX 13:09 · JFK 16:09
    ♥ Do have faith in what you're doing.