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