在 Ubuntu 上配置 Java 内存,通常涉及 JVM 参数,具体取决于你是 直接运行 Java 程序、使用 Tomcat / Spring Boot,还是 系统级配置。下面按常见场景说明。
Java 内存主要由 堆内存(Heap) 和 非堆内存(Metaspace 等) 组成。
| 参数 | 说明 |
|---|---|
-Xms |
初始堆内存 |
-Xmx |
最大堆内存 |
-XX:MetaspaceSize |
初始元空间 |
-XX:MaxMetaspaceSize |
最大元空间 |
-Xss |
每个线程栈大小 |
java -Xms512m -Xmx2g -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=256m -jar app.jar
✅ 推荐:-Xms 和 -Xmx 设置成一样,避免运行时动态扩容影响性能。
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
java -Xms512m -Xmx1024m -jar spring-app.jar
export JAVA_OPTS="-Xms512m -Xmx1024m"
java $JAVA_OPTS -jar spring-app.jar
setenv.shsudo nano /opt/tomcat/bin/setenv.sh
添加:
export JAVA_OPTS="-Xms1g -Xmx2g -XX:+UseG1GC"
如果文件不存在,直接创建即可。
ps aux | grep tomcat
如果是通过 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
ps -ef | grep java
jcmd <pid> VM.flags
jstat -gc <pid>
即使你设置了 -Xmx,也要确保:
free -h
ulimit -a
如果是 Docker / 云服务器,还可能受到:
resources.limits.memory-Xms512m -Xmx512m
-Xms2g -Xmx2g -XX:+UseG1GC
-Xms4g -Xmx4g -XX:+UseG1GC -XX:MaxMetaspaceSize=512m
-Xmx 超过物理内存会怎样?-Xmx 大?如果你愿意,可以告诉我:
java -version)我可以给你 精确配置方案。