在 Ubuntu 生态里选版本,核心原则就一个:LTS(Long Term Support,长期支持版)。
别去折腾非 LTS 的中间版本(比如 21.04, 22.10 等),除非你是为了测试新内核特性或者你有极强的维护能力。对于生产环境的 Java 应用服务器,稳定性大于一切。
目前最推荐、兼容性最好、也是国内云厂商默认镜像最多的选择是:
Ubuntu 22.04 LTS (Jammy Jellyfish)
为什么是 22.04?
-
生命周期长
- 标准支持期到 2027 年,Extended Security Maintenance (ESM) 可延至 2032 年。
- 这意味着你在这台服务器上部署 Java 应用后,未来 5-10 年内不需要因为系统版本过保而被迫升级操作系统,减少了大量运维风险和停机窗口。
-
Java 生态支持完善
- OpenJDK 11, 17, 21 等主流 LTS 版本的 JDK 在 22.04 上都有官方仓库直接提供,安装命令
apt install openjdk-17-jdk即可,无需手动配置第三方源或 PPA。 - 容器化方面,Docker 和 Kubernetes 对 22.04 的支持非常成熟,cgroup v2 默认启用,性能更好,资源隔离更清晰。
- OpenJDK 11, 17, 21 等主流 LTS 版本的 JDK 在 22.04 上都有官方仓库直接提供,安装命令
-
云厂商适配最佳
- 阿里云、腾讯云、华为云、AWS 中国区等主流厂商,其 Ubuntu 官方镜像、Cloud-Init 初始化脚本、监控 Agent、安全补丁推送,都优先保证 LTS 版本的最新状态。
- 22.04 是目前大多数新实例创建的“默认”或“推荐”选项,驱动兼容性和网络栈优化做得最到位。
-
软件包较新但稳定
- 相比上一代 LTS(20.04),22.04 提供了更新的 GCC、Python、Glibc 等基础库,这对编译型语言依赖的 Java 应用(如 GraalVM Native Image)或需要特定版本 Nginx/Tomcat 的场景更友好。
- 同时,它没有引入过多激进的变化,社区踩坑经验已经非常丰富。
为什么不选其他版本?
-
Ubuntu 20.04 LTS:
- 依然是一个非常好的选择,尤其如果你的 Java 应用依赖一些老旧的库,或者你正在维护一个历史遗留项目。
- 它的优势是“稳如老狗”,几乎所有教程、文档都基于它编写。
- 缺点:软件包版本相对旧一些,某些新版工具链可能需要手动编译或加源。如果你是新项目,建议优先考虑 22.04。
-
Ubuntu 24.04 LTS:
- 这是最新的 LTS 版本(2024 年 4 月发布)。
- 优点:内核更新,支持最新硬件,OpenJDK 21 可能成为默认推荐。
- 风险:刚发布不久,虽然 LTS 承诺支持,但部分第三方商业软件(如某些企业级监控XX、数据库客户端)可能尚未完全适配。如果你是追求极致新技术的团队,可以试水;否则,再等半年看看社区反馈更稳妥。
-
非 LTS 版本(如 23.10, 24.10):
- 绝对不要用于生产环境。它们只有 9 个月的生命周期,频繁升级会导致服务中断风险激增,且缺乏长期安全补丁支持。
实际搭建建议
-
选择镜像:
- 在云服务器控制台创建实例时,直接选择 Ubuntu Server 22.04 LTS。
- 如果云厂商提供“精简版”或“最小化安装”镜像,优先选用,减少预装无用软件带来的安全风险和内存占用。
-
Java 安装方式:
- 推荐:使用
apt安装系统自带的 OpenJDK。sudo apt update sudo apt install openjdk-17-jdk-headless java -version - 不推荐:手动下载 Oracle JDK 二进制包解压安装(除非你有明确的许可证要求或需要特定厂商 JDK)。
- 高级用法:如果需要多版本共存,建议使用
update-alternatives或sdkman管理。
- 推荐:使用
-
关键配置:
- 确保开启
ufw防火墙,只开放必要端口(如 80, 443, 22)。 - 配置自动安全更新:
sudo apt install unattended-upgrades sudo dpkg-reconfigure unattended-upgrades - 禁用 root 远程登录,改用密钥认证 + sudo 权限模型。
- 确保开启
-
性能调优小贴士:
- Ubuntu 22.04 默认启用了 cgroup v2,这对 JVM 堆内存限制(
-XX:MaxRAMPercentage)更友好,能更准确地控制容器内 Java 进程的内存使用,避免 OOM Kill。 - 检查
vm.swappiness值,生产环境建议设为 10 或更低,减少 Swap 使用,提升 GC 停顿时间。
- Ubuntu 22.04 默认启用了 cgroup v2,这对 JVM 堆内存限制(
总结
| 场景 | 推荐版本 | 理由 |
|---|---|---|
| 新项目 / 生产环境 | Ubuntu 22.04 LTS | 平衡了新旧软件包支持,生命周期长,云厂商支持最好 |
| 老项目迁移 / 极度保守 | Ubuntu 20.04 LTS | 兼容性无敌,但软件包较旧 |
| 实验性项目 / 新技术验证 | Ubuntu 24.04 LTS | 获取最新内核和功能,但需承担潜在兼容性问题 |
| 任何情况下的生产环境 | ❌ 非 LTS 版本 | 生命周期短,不稳定,不推荐 |
最终结论:选 Ubuntu 22.04 LTS。 它是当前国内云计算环境下,Java 应用服务器最稳妥、最省心、兼容性最好的选择。
云技术博客