温馨提示×

ubuntu怎么优化java性能

小樊
33
2026-10-27 17:51:35
栏目: 编程语言

在 Ubuntu 上优化 Java 性能,通常可以从系统层面、JVM 层面、应用层面和监控调优四个方向入手。下面给你一份实用清单(以生产服务器为主,开发机可酌情简化)。


一、系统层面优化(Ubuntu)

1. 使用合适的 Ubuntu 版本

  • 推荐 Ubuntu 22.04 / 24.04 LTS
  • 内核较新,对 NUMA、CPU 调度、IO 性能更好

2. 调整文件描述符限制

Java 高并发应用很容易遇到:

Too many open files

编辑:

sudo vim /etc/security/limits.conf

添加:

* soft nofile 65536
* hard nofile 65536

用户重新登录或重启生效。

3. 禁用 swap(或降低 swappiness)

Swap 会严重影响 Java GC 性能。

sudo sysctl vm.swappiness=10

永久生效:

echo "vm.swappiness=10" | sudo tee -a /etc/sysctl.conf

如内存充足,可直接关闭 swap:

sudo swapoff -a

4. 使用性能模式(CPU)

sudo apt install linux-tools-common
sudo cpupower frequency-set -g performance

5. 使用 ext4 / xfs 并优化磁盘 IO

  • 日志、临时目录分离
  • 避免 Java 应用在慢速磁盘

二、JVM 层面优化(最关键)

1. 选择合适的 JDK

  • OpenJDK 17 / 21(LTS) 是当前最优选择
  • 避免使用很老的 JDK 8(除非历史原因)
java -version

2. 选择合适的 GC

常见组合:

场景 推荐 GC
低延迟 G1 / ZGC
高吞吐 Parallel GC
超大堆 ZGC / Shenandoah

示例(G1):

java -XX:+UseG1GC \
     -Xms4g -Xmx4g \
     -jar app.jar

ZGC(JDK 17+):

-XX:+UseZGC -Xmx8g

3. 堆内存设置原则

  • -Xms = -Xmx(避免动态扩容)
  • 不超过物理内存 70%~80%
  • 容器环境要加:
-XX:+UseContainerSupport

4. 开启 JVM 日志(用于调优)

-Xlog:gc*:file=gc.log:time,level,tags

三、应用层面优化

1. 线程池合理配置

  • CPU 密集型:线程数 ≈ CPU 核数
  • IO 密集型:可适当放大

2. 减少锁竞争

  • 使用 ConcurrentHashMap
  • 避免 synchronized 大块代码

3. 使用异步 & 非阻塞

  • Web:Spring WebFlux / Netty
  • IO:NIO / 零拷贝

四、监控与调优工具(Ubuntu)

1. 基础命令

top
htop
vmstat 1
iostat -x 1

2. JVM 工具

jps
jstat -gc <pid> 1000
jstack <pid>
jmap -heap <pid>

3. 可视化工具

  • VisualVM
  • Arthas(强烈推荐)
curl -O https://arthas.aliyun.com/arthas-boot.jar
java -jar arthas-boot.jar

4. APM(生产环境)

  • Prometheus + Grafana
  • SkyWalking
  • Elastic APM

五、容器环境特别注意(Docker)

-XX:+UseContainerSupport
-XX:MaxRAMPercentage=75

避免 JVM 不知道容器内存限制。


六、典型优化示例(Web 服务)

java \
  -XX:+UseG1GC \
  -Xms4g -Xmx4g \
  -XX:MaxGCPauseMillis=200 \
  -XX:+UseContainerSupport \
  -XX:MaxRAMPercentage=75 \
  -Xlog:gc*:file=/var/log/gc.log \
  -jar app.jar

如果你愿意,可以告诉我:

  • Ubuntu 版本
  • JDK 版本
  • 应用类型(Web / 批处理 / 消息消费)
  • 内存 & CPU 配置

我可以给你更精确的 JVM 参数。

0 踩