温馨提示×

ubuntu中java卡顿怎么解

小樊
44
2026-09-25 10:37:50
栏目: 编程语言

在 Ubuntu 上 Java 程序卡顿,原因很多,下面按常见原因 → 排查方法 → 解决思路给你一套实用清单,你可以逐项排查。


一、先确认“卡”在哪里

1️⃣ 是 CPU 占用高,还是 IO / 内存问题?

top

或更好用:

htop

看:

  • Java 进程 CPU 100%+ → 代码 / GC 问题
  • 内存快满 → 内存泄漏 / 堆太小
  • 磁盘 IO 高 → 日志 / 文件读写

二、Java 自身常见问题

2️⃣ 垃圾回收(GC)导致卡顿(最常见)

查看 GC 情况

jstat -gcutil <pid> 1000

关注:

  • FGC(Full GC 次数)
  • FGCT(Full GC 时间)

如果 Full GC 频繁且时间长 → 卡顿主因

解决方式

  • 增大堆内存:
java -Xms2g -Xmx2g -jar app.jar
  • 换 GC(推荐):
-XX:+UseG1GC

或 JDK17+:

-XX:+UseZGC

3️⃣ 线程死锁 / 线程阻塞

查看线程栈

jstack <pid> > thread.txt

重点看:

  • BLOCKED
  • WAITING
  • 死锁提示(deadlock)

常见原因

  • 同步锁使用不当
  • 数据库连接池耗尽
  • 外部接口超时

三、Ubuntu 系统层面问题

4️⃣ 系统内存不足(Swap 抖动)

free -h
swapon --show

如果频繁使用 swap:

  • 增加内存
  • 或关闭 swap(仅限内存充足时)
sudo swapoff -a

5️⃣ 文件描述符不足

ulimit -n

Java 网络服务容易爆:

java.io.IOException: Too many open files

修改

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

6️⃣ 磁盘 IO 瓶颈

iostat -x 1

如果 %util 接近 100%:

  • 减少日志
  • 日志异步写
  • 换 SSD

四、Java 版本问题

7️⃣ JDK 版本太旧 / 不匹配

java -version

建议:

  • 生产环境用 LTS
    • JDK 11 / 17 / 21
  • 避免 OpenJDK 早期小版本 bug

五、快速自检清单(推荐顺序)

✅ top 看 CPU / 内存
✅ jstat 看 GC
✅ jstack 看线程
✅ free -h 看 swap
✅ ulimit -n 看文件句柄
✅ 升级 JDK + 调整 JVM 参数


六、如果你愿意,我可以进一步帮你

你可以补充:

  1. Java 用途(Web / 爬虫 / 游戏 / 工具)
  2. JDK 版本
  3. 启动参数
  4. top / jstat 截图或输出

我可以直接帮你定位具体卡顿原因并给参数配置。

0 踩