在 CentOS 上调整 Java 内存,通常是指调整 JVM 的堆内存(Heap)和非堆内存,常见场景包括:
下面按 常见方式 说明。
| 参数 | 说明 |
|---|---|
-Xms |
初始堆内存 |
-Xmx |
最大堆内存 |
-Xmn |
年轻代大小(可选) |
-XX:MetaspaceSize |
元空间初始大小 |
-XX:MaxMetaspaceSize |
元空间最大值 |
-Xss |
每个线程栈大小 |
✅ 生产环境建议:
-Xms 和 -Xmx 设置成一样,避免动态扩容影响性能
java -Xms2g -Xmx2g -jar app.jar
或:
java -Xms512m -Xmx1024m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=256m -jar app.jar
java -Xms1g -Xmx1g -jar your-app.jar
export JAVA_OPTS="-Xms1g -Xmx1g"
java $JAVA_OPTS -jar app.jar
catalina.shvi /usr/local/tomcat/bin/catalina.sh
添加:
export JAVA_OPTS="-Xms2g -Xmx2g -XX:MetaspaceSize=256m -XX:MaxMetaspaceSize=512m"
或(CentOS 7+ systemd 方式):
vi /usr/local/tomcat/conf/setenv.sh
export JAVA_OPTS="-Xms2g -Xmx2g"
/etc/systemd/system/app.service[Service]
Environment="JAVA_OPTS=-Xms1g -Xmx1g"
ExecStart=/usr/bin/java $JAVA_OPTS -jar /opt/app/app.jar
重载并重启:
systemctl daemon-reload
systemctl restart app
⚠️ 不要直接改 -Xmx 在启动脚本里
vi /etc/elasticsearch/jvm.options
-Xms4g
-Xmx4g
❗ 不要超过物理内存的 50%,且不要超过 32GB(JVM 压缩指针失效)
ps -ef | grep java
jps -v
或:
jinfo -flags <pid>
jstat -gc <pid>
free -h
swapoff -a
或调整 swappiness:
echo 1 > /proc/sys/vm/swappiness
| 内存大小 | 建议 |
|---|---|
| 2G | -Xms1g -Xmx1g |
| 4G | -Xms2g -Xmx2g |
| 8G | -Xms4g -Xmx4g |
| 16G+ | 不超过物理内存 50% |
❌ -Xmx 超过系统可用内存
❌ 只设置 -Xmx 不设置 -Xms
❌ 在 systemd 中直接改 java 命令
❌ Elasticsearch 设置超过 32G
如果你愿意,可以告诉我:
✅ CentOS 版本
✅ Java 版本
✅ 运行的是什么程序(Tomcat / Spring Boot / ES / Kafka)
我可以给你一个 完全贴合你环境的配置示例。