温馨提示×

Ubuntu Java内存如何调整

小樊
34
2026-07-12 19:53:52
栏目: 编程语言

在 Ubuntu 上调整 Java 内存(JVM 堆内存),主要取决于你是以什么方式运行 Java 程序(命令行、Tomcat、Spring Boot、Docker 等)。下面按常见场景详细说明。


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

常用参数

-Xms512m      # 初始堆内存
-Xmx2048m     # 最大堆内存
-XX:PermSize=256m        # JDK7 及以前(永久代)
-XX:MaxPermSize=512m

JDK8 及以后: 永久代(PermGen)被 Metaspace 取代:

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

示例

java -Xms1g -Xmx2g -XX:MetaspaceSize=256m -XX:MaxMetaspaceSize=512m -jar app.jar

二、不同运行方式的内存调整

1️⃣ 普通 Java 程序

java -Xms512m -Xmx1024m MainClass

2️⃣ Spring Boot

java -Xms512m -Xmx1024m -jar spring-app.jar

或:

export JAVA_OPTS="-Xms512m -Xmx1024m"
java $JAVA_OPTS -jar spring-app.jar

3️⃣ Tomcat(非常常见)

修改 catalina.sh

sudo nano /opt/tomcat/bin/catalina.sh

添加:

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

或(推荐方式):

CATALINA_OPTS="-Xms1g -Xmx2g"

4️⃣ systemd 服务(Java 后台服务)

假设服务文件:

/etc/systemd/system/app.service

修改:

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

然后:

sudo systemctl daemon-reload
sudo systemctl restart app

5️⃣ Docker 中运行 Java(⚠ 特别注意)

✅ 推荐(JDK8u191+ / JDK11+)

java -XX:+UseContainerSupport -XX:MaxRAMPercentage=75.0 -jar app.jar

或:

java -Xmx512m -jar app.jar

❌ 不推荐只设置 -Xmx,否则容器内存限制可能不生效。


三、查看当前 Java 内存设置

查看进程

ps -ef | grep java

使用 jcmd

jcmd <pid> VM.flags

使用 jinfo

jinfo -flags <pid>

四、如何判断内存是否够用?

查看 GC 日志(推荐)

java -Xlog:gc* -jar app.jar

查看实时内存

jstat -gc <pid> 1000

五、Ubuntu 系统层面注意事项

查看系统内存

free -h

查看最大进程内存限制

ulimit -v
ulimit -m

容器或云服务器常见坑点:

  • Ubuntu 内存被大量 buff/cache 占用是正常现象
  • Java 实际可用内存 ≠ 系统总内存

六、推荐配置示例(通用)

4G 服务器

-Xms1g
-Xmx2g

8G 服务器

-Xms2g
-Xmx4g

生产环境建议

  • -Xms-Xmx 设置成一样,避免动态扩容抖动
  • 开启 GC 日志
  • 使用 G1 GC(JDK8+)
-XX:+UseG1GC

七、常见错误

❌ 设置 -Xmx 超过系统可用内存
❌ Docker 中没开容器支持
❌ 忘了重启服务
❌ 把 JAVA_OPTS 写错位置(Tomcat)


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

  • ✅ Ubuntu 版本
  • ✅ JDK 版本
  • ✅ 运行方式(Tomcat / Spring Boot / Docker / 普通 Java)

我可以给你 一份完全贴合你环境的 JVM 内存配置方案

0