温馨提示×

centos中java编译慢怎么破

小樊
47
2026-09-09 08:22:48
栏目: 编程语言

在 CentOS 上 Java 编译慢,通常不是单点问题,而是 JDK、系统资源、构建工具、磁盘/文件系统、依赖下载 等多方面叠加。下面给你一套从快到慢、可落地的排查与优化方案


一、先确认“慢”在哪里(很重要)

先别急着优化,先定位:

time mvn compile
# 或
time javac -d out src/**/*.java

观察是:

  • CPU 很低但时间长(多半是 IO / 网络)
  • CPU 很高但慢(编译参数 / JDK 问题)
  • 卡在 download(依赖下载)

二、JDK 层面(最常见)

1️⃣ 使用 Server JIT(默认应开启)

确认不是 client 模式:

java -version

看到 Server VM 才是正常的。

2️⃣ 使用较新 JDK(强烈建议)

CentOS 自带 OpenJDK 经常偏旧:

java -version

推荐:

  • JDK 11+
  • JDK 17(编译最快)
  • 不要用 gcj、老 JDK 8u 老版本

安装:

yum install java-17-openjdk-devel

三、构建工具优化(Maven / Gradle)

Maven

✅ 开多线程

mvn -T 4 compile
# 或
mvn -T 1C compile

✅ 跳过不必要阶段

mvn compile -DskipTests

✅ 使用本地仓库缓存

确认:

ls ~/.m2/repository

避免每次拉依赖:

mvn -o compile   # offline

Gradle(如果你用)

./gradlew build --parallel

开启守护:

org.gradle.daemon=true
org.gradle.parallel=true
org.gradle.caching=true

四、磁盘 & 文件系统(非常关键)

1️⃣ 不要用 NFS / 网络盘

很多 CentOS 编译慢是:

  • 代码在 NFS
  • .m2 在 NFS

✅ 解决:

cp -r project /localdisk/
mvn compile

2️⃣ 使用 tmpfs(极致提速)

mkdir /dev/shm/build
cp -r project /dev/shm/build

五、系统资源问题

1️⃣ 内存不足导致 swap

free -h
swapon -s

如果有 swap 在狂用:

  • 加内存
  • 或限制 JVM 内存
export MAVEN_OPTS="-Xmx2g"

2️⃣ CPU 被限制(云服务器)

nproc
top

小核机器编译天然慢。


六、杀毒 / 安全软件拖慢(容易被忽略)

CentOS 常见:

systemctl status firewalld
systemctl status clamav

✅ 临时关闭测试:

systemctl stop clamav-daemon

七、终极加速方案(生产级)

✅ 使用 ccache(C++ 不适用 Java,但可类比)

Java 可:

  • 编译结果缓存
  • 使用 Build Cache(Gradle)
  • Maven 用 mvn-accelerator

✅ 使用远程编译(大型项目)

  • Bazel
  • Remote Build Execution

八、快速自查清单(照着做)

✅ JDK ≥ 11
✅ 不在 NFS
✅ Maven 开 -T
✅ 不在 swap
✅ 依赖已缓存
✅ 跳测试


九、如果你愿意

你可以直接贴:

  • CentOS 版本
  • JDK 版本
  • Maven / Gradle
  • time mvn compile 输出

我可以精确告诉你卡在哪一步

0