温馨提示×

Ubuntu Java如何配置内存

小樊
38
2026-08-11 18:06:35
栏目: 编程语言

Ubuntu 上配置 Java 内存,通常涉及 JVM 参数,具体取决于你是 直接运行 Java 程序使用 Tomcat / Spring Boot,还是 系统级配置。下面按常见场景说明。


一、Java 内存相关核心参数

Java 内存主要由 堆内存(Heap)非堆内存(Metaspace 等) 组成。

常用 JVM 内存参数

参数 说明
-Xms 初始堆内存
-Xmx 最大堆内存
-XX:MetaspaceSize 初始元空间
-XX:MaxMetaspaceSize 最大元空间
-Xss 每个线程栈大小

示例

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

推荐-Xms-Xmx 设置成一样,避免运行时动态扩容影响性能。


二、Ubuntu 下不同场景配置方式


✅ 1. 直接运行 Java 程序

命令行方式

java -Xms1g -Xmx2g -jar your_app.jar

写成脚本(推荐)

#!/bin/bash
JAVA_OPTS="-Xms1g -Xmx2g -XX:+UseG1GC"
java $JAVA_OPTS -jar app.jar

赋予执行权限:

chmod +x start.sh
./start.sh

✅ 2. Spring Boot 应用

方式一:命令行

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

方式二:环境变量(推荐)

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

✅ 3. Tomcat(Ubuntu 常见)

修改 setenv.sh

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

添加:

export JAVA_OPTS="-Xms1g -Xmx2g -XX:+UseG1GC"

如果文件不存在,直接创建即可。

检查是否生效

ps aux | grep tomcat

✅ 4. 系统服务(systemd)

如果是通过 systemd 启动的 Java 程序:

编辑服务文件

sudo nano /etc/systemd/system/yourapp.service

配置示例

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

重新加载

sudo systemctl daemon-reexec
sudo systemctl restart yourapp

三、查看当前 Java 内存配置

1️⃣ 查看进程 JVM 参数

ps -ef | grep java

2️⃣ 使用 jcmd

jcmd <pid> VM.flags

3️⃣ 查看内存使用情况

jstat -gc <pid>

四、Ubuntu 系统内存限制(容易被忽略)

即使你设置了 -Xmx,也要确保:

查看系统内存

free -h

查看是否有限制

ulimit -a

如果是 Docker / 云服务器,还可能受到:

  • Docker 内存限制
  • Kubernetes resources.limits.memory

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

小应用(1–2 GB 服务器)

-Xms512m -Xmx512m

中型服务(4 GB)

-Xms2g -Xmx2g -XX:+UseG1GC

大型服务(8 GB+)

-Xms4g -Xmx4g -XX:+UseG1GC -XX:MaxMetaspaceSize=512m

六、常见问题

❓ 设置 -Xmx 超过物理内存会怎样?

  • 可能触发 swap
  • 系统变慢甚至 OOM 被杀

❓ 为什么 Java 占用的内存比 -Xmx 大?

  • JVM 本身 + Metaspace + 线程栈 + 堆外内存

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

  • ✅ Ubuntu 版本
  • ✅ Java 版本(java -version
  • ✅ 是普通程序 / Spring Boot / Tomcat / Docker

我可以给你 精确配置方案

0