在 Debian(或任何 Linux)上设置 Java 内存,核心是通过 JVM 参数 来控制,而不是操作系统本身。下面按常见场景给你一个完整说明。
-Xms512m
-Xmx1024m
含义:
-Xms:初始堆内存-Xmx:最大堆内存(最常用)✅ 推荐:
-Xms2g -Xmx2g
(避免堆动态扩容带来的性能抖动)
-XX:MetaspaceSize=128m
-XX:MaxMetaspaceSize=256m
-Xss256k
java -Xms1g -Xmx2g -jar app.jar
/etc/systemd/system/myapp.service[Unit]
Description=Java App
After=network.target
[Service]
Type=simple
User=appuser
ExecStart=/usr/bin/java \
-Xms1g \
-Xmx2g \
-XX:MetaspaceSize=128m \
-XX:MaxMetaspaceSize=256m \
-jar /opt/app/app.jar
Restart=always
[Install]
WantedBy=multi-user.target
然后:
sudo systemctl daemon-reload
sudo systemctl restart myapp
sudo nano /opt/tomcat/bin/setenv.sh
(没有就新建)
export JAVA_OPTS="-Xms1g -Xmx2g"
或:
export CATALINA_OPTS="-Xms1g -Xmx2g"
java -Xms512m -Xmx1g -jar spring-app.jar
export JAVA_OPTS="-Xms512m -Xmx1g"
java $JAVA_OPTS -jar spring-app.jar
ps -ef | grep java
jcmd <pid> VM.flags
jstat -gc <pid>
free -h
❌ 错误示例(16G 机器):
-Xmx20g
✅ 建议:
| 内存大小 | 推荐设置 |
|---|---|
| 2G | -Xms1g -Xmx1g |
| 4G | -Xms2g -Xmx2g |
| 8G | -Xms4g -Xmx4g |
| 16G | -Xms8g -Xmx8g |
CATALINA_OPTS,不是 JAVA_OPTS如果你愿意,可以告诉我:
我可以给你 精确到文件级别 的配置示例。