温馨提示×

CentOS Java内存如何调整

小樊
48
2026-08-18 08:50:47
栏目: 编程语言

CentOS 上调整 Java 内存,通常是指调整 JVM 的堆内存(Heap)和非堆内存,常见场景包括:

  • 运行 Java 程序(jar / war)
  • 运行 Tomcat / Spring Boot
  • 运行大数据组件(Hadoop / Elasticsearch / Kafka 等)

下面按 常见方式 说明。


一、最常用:通过 JVM 参数调整内存

1️⃣ 核心 JVM 内存参数

参数 说明
-Xms 初始堆内存
-Xmx 最大堆内存
-Xmn 年轻代大小(可选)
-XX:MetaspaceSize 元空间初始大小
-XX:MaxMetaspaceSize 元空间最大值
-Xss 每个线程栈大小

生产环境建议

-Xms 和 -Xmx 设置成一样,避免动态扩容影响性能

2️⃣ 示例:运行 Java 程序

java -Xms2g -Xmx2g -jar app.jar

或:

java -Xms512m -Xmx1024m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=256m -jar app.jar

二、CentOS 上不同场景的配置方式


✅ 场景 1:Spring Boot / 普通 Java 程序

临时方式(命令行)

java -Xms1g -Xmx1g -jar your-app.jar

环境变量方式(推荐)

export JAVA_OPTS="-Xms1g -Xmx1g"
java $JAVA_OPTS -jar app.jar

✅ 场景 2:Tomcat(非常常见)

修改 catalina.sh

vi /usr/local/tomcat/bin/catalina.sh

添加:

export JAVA_OPTS="-Xms2g -Xmx2g -XX:MetaspaceSize=256m -XX:MaxMetaspaceSize=512m"

或(CentOS 7+ systemd 方式):

vi /usr/local/tomcat/conf/setenv.sh
export JAVA_OPTS="-Xms2g -Xmx2g"

✅ 场景 3:systemd 服务(CentOS 7/8)

示例:/etc/systemd/system/app.service

[Service]
Environment="JAVA_OPTS=-Xms1g -Xmx1g"
ExecStart=/usr/bin/java $JAVA_OPTS -jar /opt/app/app.jar

重载并重启:

systemctl daemon-reload
systemctl restart app

✅ 场景 4:Elasticsearch / Kafka(特殊)

⚠️ 不要直接改 -Xmx 在启动脚本里

Elasticsearch

vi /etc/elasticsearch/jvm.options
-Xms4g
-Xmx4g

❗ 不要超过物理内存的 50%,且不要超过 32GB(JVM 压缩指针失效)


三、查看 Java 内存是否生效

1️⃣ 查看进程

ps -ef | grep java

2️⃣ 查看 JVM 参数

jps -v

或:

jinfo -flags <pid>

3️⃣ 查看内存使用

jstat -gc <pid>

四、CentOS 系统层面注意事项

1️⃣ 查看系统内存

free -h

2️⃣ 避免 swap(影响 Java 性能)

swapoff -a

或调整 swappiness:

echo 1 > /proc/sys/vm/swappiness

五、常见推荐配置(经验值)

内存大小 建议
2G -Xms1g -Xmx1g
4G -Xms2g -Xmx2g
8G -Xms4g -Xmx4g
16G+ 不超过物理内存 50%

六、常见错误

-Xmx 超过系统可用内存
❌ 只设置 -Xmx 不设置 -Xms
❌ 在 systemd 中直接改 java 命令
❌ Elasticsearch 设置超过 32G


如果你愿意,可以告诉我:
CentOS 版本
Java 版本
运行的是什么程序(Tomcat / Spring Boot / ES / Kafka)

我可以给你一个 完全贴合你环境的配置示例

0