GoForum › 🌐 V2EX

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

g632104866 · 2026-07-21 14:28 · 0 次点赞 · 0 条回复

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%。
0 条回复
添加回复
你还需要 登录 后发表回复

登录后可发帖和回复

登录 注册
主题信息
作者: g632104866
发布: 2026-07-21
点赞: 0
回复: 0