温馨提示×

CentOS编译Java速度慢怎么解

小樊
50
2026-08-19 17:13:20
栏目: 编程语言

CentOS 上编译 Java(尤其是大型项目)速度慢,通常不是单一原因,而是CPU、内存、磁盘 IO、JDK、构建工具配置等多个因素叠加。下面按最常见 → 进阶 → 高级给你一套排查和加速方案。


一、最常见原因 & 快速优化(80% 情况)

1️⃣ 内存不足(最常见)

编译 Java 时 Maven / Gradle / javac 都很吃内存。

现象

  • 编译卡住
  • CPU 不高但很慢
  • 频繁 GC

解决

Maven

export MAVEN_OPTS="-Xmx4g -Xms2g"

Gradle

export GRADLE_OPTS="-Xmx4g -Xms2g"

服务器建议:

  • 编译机 ≥ 8GB 内存
  • 大型项目 ≥ 16GB

2️⃣ 编译线程数太少

默认可能只用 1 个 CPU 核心。

Maven

mvn -T 4 clean package
mvn -T 1C clean package   # 每个 CPU 一个线程

Gradle

gradle build --parallel

3️⃣ JDK 版本太老或错误

老 JDK(如 JDK 7/8)比新 JDK 慢很多。

✅ 推荐:

  • JDK 17 / 21(LTS)
  • 使用 HotSpot,不要用 OpenJ9(除非你很清楚)

查看:

java -version

4️⃣ 磁盘 IO 慢(机械盘 / 云盘)

编译会产生大量 .class、临时文件。

检查

iostat -x 1

优化

  • 使用 SSD
  • 把编译目录放到 SSD
  • 避免 NFS / 网络盘

二、构建工具专项优化

✅ Maven 优化

1. 跳过不需要的步骤

mvn clean package -DskipTests -Dmaven.javadoc.skip=true

2. 使用本地仓库缓存

确保:

~/.m2/repository

不在慢磁盘上。


✅ Gradle 优化

开启构建缓存

gradle.properties

org.gradle.caching=true
org.gradle.parallel=true
org.gradle.daemon=true
org.gradle.jvmargs=-Xmx4g

使用增量编译

gradle build --parallel --incremental

三、系统级优化(CentOS)

1️⃣ 关闭 swap(非常重要)

swap 会严重拖慢编译。

free -h

临时关闭:

sudo swapoff -a

永久关闭:

sudo vi /etc/fstab
# 注释 swap 行

2️⃣ 调整文件句柄数

Java 编译会打开大量文件。

ulimit -n

建议:

ulimit -n 65535

永久:

vi /etc/security/limits.conf
* soft nofile 65535
* hard nofile 65535

3️⃣ 使用高性能 CPU 调度

如果是云服务器:

  • 选择 计算型实例
  • 避免突发性能型(T 系列)

四、源码 & 项目层面优化

1️⃣ 编译范围过大

只编译需要的模块:

mvn -pl module-name -am package

2️⃣ 注解处理器过多

如 Lombok、MapStruct、AutoService。

✅ 确保:

  • 注解处理器版本匹配
  • 不要重复处理

五、终极排查方法(定位瓶颈)

1️⃣ 看 CPU 是否真的在干活

top
htop
  • CPU 低 → 内存 / IO 问题
  • CPU 高 → 构建配置问题

2️⃣ 看是不是卡在下载依赖

mvn -X clean package

如果是:

  • 换国内 Maven 镜像
<mirror>
  <id>aliyun</id>
  <mirrorOf>central</mirrorOf>
  <url>https://maven.aliyun.com/repository/central</url>
</mirror>

六、推荐配置总结(直接照抄)

8C16G CentOS 编译 Java 推荐:

export MAVEN_OPTS="-Xmx8g -Xms4g"
mvn clean package -T 1C -DskipTests

Gradle:

org.gradle.caching=true
org.gradle.parallel=true
org.gradle.daemon=true
org.gradle.jvmargs=-Xmx8g

七、如果你愿意,我可以更精确帮你

你可以直接贴:

  1. CentOS 版本
  2. CPU / 内存
  3. 用的是 Maven 还是 Gradle
  4. 项目规模(单模块 / 多模块)
  5. 编译命令

我可以给你针对性最优参数,甚至直接给你 systemd / Docker / CI 编译优化方案

0