温馨提示×

centos java内存怎么调优

小樊
48
2026-09-11 16:05:03
栏目: 编程语言

在 CentOS 上做 Java 内存调优,通常从 JVM 参数、系统资源、监控工具、应用本身 四个方面入手。下面给你一套实用、可操作的思路。


一、确认基础环境(先做的事)

1. 查看 Java 版本

java -version

不同 JDK(8 / 11 / 17)默认 GC 和参数差异很大。

2. 查看系统内存

free -h
top

确认:

  • 物理内存大小
  • 是否被其他进程占用
  • Swap 是否频繁使用(Swap 高 = 内存不足)

二、JVM 内存核心参数(最重要)

1. 堆内存设置(最常用)

-Xms2g -Xmx2g

含义:

  • -Xms:初始堆
  • -Xmx:最大堆

✅ 建议:生产环境 Xms = Xmx,避免频繁扩容

示例(4G 服务器):

-Xms2g -Xmx2g

2. 堆外内存(容易被忽视)

-XX:MaxDirectMemorySize=512m

用于:

  • NIO
  • Netty
  • 中间件(Redis、Kafka 客户端)

3. 元空间(JDK 8+)

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

防止:

  • 类加载过多导致 OOM

三、GC 调优(性能关键)

1. JDK 8(默认 Parallel GC)

-XX:+UseParallelGC

2. 低延迟场景(推荐)

-XX:+UseG1GC

示例:

-Xms4g -Xmx4g \
-XX:+UseG1GC \
-XX:MaxGCPauseMillis=200

3. JDK 11/17

-XX:+UseZGC

或

-XX:+UseG1GC

四、CentOS 系统层优化

1. 关闭 Swap(内存充足时)

swapoff -a

或降低使用倾向:

sysctl vm.swappiness=10

2. 文件句柄数

ulimit -n 65535

修改:

/etc/security/limits.conf

3. 内核参数(高并发)

net.core.somaxconn=1024
net.ipv4.tcp_tw_reuse=1

五、常用监控 & 排查命令

1. JVM 实时状态

jstat -gcutil <pid> 1000

2. 堆内存快照

jmap -dump:format=b,file=heap.hprof <pid>

3. 线程分析

jstack <pid> > thread.txt

4. 图形工具

  • VisualVM
  • MAT(分析 hprof)
  • Prometheus + Grafana

六、典型问题 & 解决

❌ 频繁 Full GC

  • 堆太小
  • 内存泄漏
  • 大对象过多

✅ 解决:

  • 增大堆
  • 分析 dump
  • 优化集合使用

❌ OOM: Metaspace

-XX:MaxMetaspaceSize=512m

并检查:

  • 动态代理
  • 热部署

❌ CPU 飙高

  • 死循环
  • GC 频繁
  • 锁竞争

七、一个生产示例(CentOS + JDK 11)

java -Xms4g -Xmx4g \
-XX:+UseG1GC \
-XX:MaxGCPauseMillis=200 \
-XX:MetaspaceSize=256m \
-XX:MaxMetaspaceSize=512m \
-XX:MaxDirectMemorySize=512m \
-jar app.jar

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

  • ✅ CentOS 版本
  • ✅ JDK 版本
  • ✅ 应用类型(Web / 中间件 / 批处理)
  • ✅ 内存大小和现象(OOM / 卡顿 / CPU 高)

我可以直接给你 一套可落地的参数配置。

0 踩