在 Ubuntu 上调整 Java 内存,通常是通过 JVM 启动参数 来设置的。下面按常见场景给你说明。
Java 内存主要由 堆内存 和 非堆内存(元空间等) 组成。
java -Xms512m -Xmx2048m -jar app.jar
含义:
-Xms512m:初始堆内存 512MB-Xmx2048m:最大堆内存 2GB✅ 建议:
-Xms 和 -Xmx 设成一样,避免动态扩容影响性能-XX:MetaspaceSize=128m
-XX:MaxMetaspaceSize=512m
防止元空间无限增长导致 OOM。
-Xss256k
每个线程的栈大小,线程多时可适当减小。
java -Xms1g -Xmx2g -jar your_app.jar
编辑:
sudo nano /opt/tomcat/bin/setenv.sh
加入:
export JAVA_OPTS="-Xms1g -Xmx2g -XX:MaxMetaspaceSize=512m"
没有就新建该文件。
编辑 service 文件:
sudo nano /etc/systemd/system/your-app.service
在 [Service] 中:
Environment="JAVA_OPTS=-Xms1g -Xmx2g"
ExecStart=/usr/bin/java $JAVA_OPTS -jar /path/app.jar
然后:
sudo systemctl daemon-reload
sudo systemctl restart your-app
docker run -e JAVA_OPTS="-Xms512m -Xmx1g" my-java-image
⚠️ JDK 8u191+ 推荐加:
-XX:+UseContainerSupport
ps aux | grep java
jps
jstat -gc <pid>
jconsole
# 或
jvisualvm
❌ 设置内存超过物理内存
❌ 容器里没限制内存但 JVM 不知道
❌ -Xmx 太大导致系统 swap
-Xms2g
-Xmx2g
-XX:MaxMetaspaceSize=512m
-XX:+UseG1GC
如果你能告诉我:
我可以给你一份精确优化方案。