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

g632104866 2026-07-21 14:27 1

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 等制品格式。



  • https://github.com/klboke/kkRepo ,点 star 支持


支持 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%。

最新回复 (3)
  • lcingOnTheCake 07-21 14:32
    1
    能有 graalvm 好?
  • g632104866 楼主 07-21 14:42
    2
    @lcingOnTheCake 用的 Spring Native ,就是 Graalvm 了
  • daimaosix 07-22 11:41
    3
    看上去不错,但是看 README 好像不支持 Debian/Ubuntu 仓库吗?
* 帖子来源V2EX
返回