温馨提示×

ubuntu运行java慢怎么办

小樊
35
2026-09-19 07:35:44
栏目: 编程语言

在 Ubuntu 上运行 Java 慢,通常可以从系统环境、JVM 参数、Java 版本、程序本身、资源占用几个方向来排查和优化。下面给你一套实用思路:


一、先确认“慢”在哪里

  1. 启动慢还是运行慢?

    • 启动慢:多是 JVM 初始化、类加载、GC
    • 运行慢:多是 CPU、内存、IO、锁、算法问题
  2. 用工具看瓶颈

top
htop
jstack <pid>
jstat -gc <pid> 1000
  • CPU 高 → 算法 / 死循环
  • 内存常满 → GC 频繁
  • IO 等待高 → 磁盘 / 网络

二、Ubuntu 系统层面优化

1. 使用 Server JRE / 正确 JVM

java -version

推荐:

  • OpenJDK 17 / 21(LTS)
  • 服务器用 -server(新版默认)

安装:

sudo apt install openjdk-17-jdk

2. 关闭无用服务

systemctl list-unit-files --type=service

禁用不必要服务,释放 CPU / 内存

3. 调整文件描述符限制

ulimit -n

如太小(如 1024),编辑:

sudo vim /etc/security/limits.conf
* soft nofile 65536
* hard nofile 65536

三、JVM 参数优化(非常重要)

1. 设置堆内存

java -Xms512m -Xmx2g -jar app.jar

避免频繁扩容

2. 选择合适的 GC

Java 17+:

-XX:+UseG1GC

或大内存:

-XX:+UseZGC

查看 GC:

jstat -gcutil <pid> 1000

四、Java 程序本身问题

1. 避免频繁创建对象

  • 用对象池
  • 避免 String + 循环

2. 日志别太多

  • 生产环境 INFO 足够
  • 异步日志(Logback AsyncAppender)

3. 合理使用多线程

  • 线程数 ≈ CPU 核数
  • 避免锁竞争

五、磁盘 & IO 问题

1. 用 SSD

lsblk

HDD 上 Java IO 会明显慢

2. 临时目录改用内存盘

java -Djava.io.tmpdir=/dev/shm -jar app.jar

六、常见 Ubuntu + Java 慢的坑

熵池不足(随机数慢)

cat /proc/sys/kernel/random/entropy_avail

如果很小:

sudo apt install haveged

IPv6 导致连接慢

java -Djava.net.preferIPv4Stack=true -jar app.jar

时间同步问题

timedatectl status

七、快速自查清单

  • [ ] Java 版本是否过旧
  • [ ] 是否设置了 -Xms -Xmx
  • [ ] 是否 GC 频繁
  • [ ] CPU / 内存是否瓶颈
  • [ ] 是否在 HDD 上跑
  • [ ] 日志是否过多

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

  • Java 版本
  • 是 Web / 桌面 / 后台服务
  • 启动慢还是接口慢
  • CPU / 内存配置

我可以给你针对性的参数和命令

0