温馨提示×

ubuntu下java性能怎么优化

小樊
41
2026-09-07 05:56:32
栏目: 编程语言

在 Ubuntu 下优化 Java 性能,通常可以从 系统层、JVM 层、应用层、监控与调优工具 四个维度来做。下面给你一个比较实用、可落地的优化思路。


一、系统与 Ubuntu 层面优化

1. 使用合适的 Linux 内核参数

编辑 /etc/sysctl.conf/etc/sysctl.d/99-java.conf

# 提高文件描述符上限
fs.file-max = 1000000

# TCP 优化(高并发场景)
net.core.somaxconn = 65535
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_fin_timeout = 30

# 虚拟内存
vm.swappiness = 10
vm.dirty_ratio = 10
vm.dirty_background_ratio = 5

执行:

sysctl -p

2. 调整文件描述符限制

ulimit -n 100000

永久生效(/etc/security/limits.conf):

* soft nofile 100000
* hard nofile 100000

3. 使用高性能文件系统 & IO 调度

  • 使用 ext4xfs
  • SSD 上设置 IO 调度器:
echo none > /sys/block/sda/queue/scheduler

4. 关闭不必要的服务

systemctl disable bluetooth
systemctl disable cups

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

1. 选择合适的 JDK

  • OpenJDK 17 / 21(LTS)推荐
  • 高吞吐:HotSpot
  • 低延迟:GraalVM / ZGC / Shenandoah

查看版本:

java -version

2. 内存与 GC 优化

通用推荐(JDK 17+)

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

低延迟场景(ZGC)

java -Xms4g -Xmx4g \
     -XX:+UseZGC \
     -XX:+ZGenerational \
     -jar app.jar

高吞吐场景

-XX:+UseParallelGC

3. 重要 JVM 参数说明

参数 作用
-Xms / -Xmx 堆内存大小(建议相等)
-XX:MaxMetaspaceSize 防止 Metaspace 无限增长
-XX:+HeapDumpOnOutOfMemoryError OOM 自动 dump
-XX:+PrintGCDetails GC 日志
-XX:+AlwaysPreTouch 启动时预热内存

示例:

-XX:MetaspaceSize=256m
-XX:MaxMetaspaceSize=512m

三、应用层优化

1. 线程与连接池

  • Tomcat:
maxThreads=200
acceptCount=100
  • 数据库连接池(HikariCP):
maximumPoolSize=20
connectionTimeout=30000

2. 减少锁竞争

  • 使用 ConcurrentHashMap
  • 避免 synchronized 大方法
  • 使用线程局部变量 ThreadLocal

3. 序列化优化

  • 使用 Protostuff / Kryo
  • JSON 用 Jackson(开启 Afterburner)

四、监控与排查工具(Ubuntu 下必备)

1. 系统监控

top
htop
vmstat 1
iostat -x 1

2. JVM 工具

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

3. 可视化工具

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

4. GC 日志分析

-Xlog:gc*:file=gc.log:time

分析工具:

  • GCViewer
  • GCEasy(https://gceasy.io)

五、典型优化路径(实战建议)

  1. 先确定瓶颈(CPU / 内存 / IO / 锁)
  2. 开启 GC 日志
  3. 选合适 GC
  4. 调堆大小
  5. 用 Arthas 定位慢方法
  6. 压测验证(JMeter / wrk)

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

  • Java 版本
  • 应用类型(Web / 微服务 / 批处理)
  • 服务器配置(CPU / 内存)
  • 当前遇到的性能问题(CPU 高 / 卡顿 / OOM)

我可以给你一套 针对性的 JVM 参数和调优方案

0