在CentOS中配置Java内存,核心是通过JVM启动参数调整堆内存、元空间等核心区域的大小。常见参数包括:
-Xms:设置JVM启动时的初始堆内存大小(如-Xms512m表示初始堆为512MB);-Xmx:设置JVM允许的最大堆内存大小(如-Xmx2g表示最大堆为2GB);-Xmn:设置新生代内存大小(如-Xmn1g表示新生代为1GB,剩余为老年代);-XX:NewRatio:设置新生代与老年代的比例(如-XX:NewRatio=3表示新生代占1/4,老年代占3/4);-XX:SurvivorRatio:设置Eden区与Survivor区的比例(如-XX:SurvivorRatio=8表示Eden区占80%,每个Survivor区占10%);-XX:MetaspaceSize/-XX:MaxMetaspaceSize:设置元空间初始大小和最大大小(Java 8及以上替代永久代,如-XX:MetaspaceSize=256m、-XX:MaxMetaspaceSize=512m);-XX:+UseG1GC:指定垃圾回收器(如G1GC,适用于大内存应用)。以上参数需根据应用实际需求组合使用,例如:
java -Xms4g -Xmx4g -Xmn1g -XX:NewRatio=3 -XX:MetaspaceSize=256m -XX:MaxMetaspaceSize=512m -XX:+UseG1GC -jar your-application.jar
根据应用启动方式(命令行、脚本、systemd服务),可选择以下一种或多种方式配置:
启动Java应用时,在命令行中直接添加JVM参数,适用于临时调试或快速验证:
java -Xms512m -Xmx1024m -jar /path/to/your-application.jar
这种方式仅在当前终端会话中生效,关闭终端后失效。
通过设置JAVA_OPTS环境变量,让所有Java应用默认使用指定的内存参数:
export JAVA_OPTS="-Xms512m -Xmx1024m";~/.bashrc)或系统全局配置文件(/etc/profile)中,然后运行source ~/.bashrc(或source /etc/profile)使更改生效。java $JAVA_OPTS -jar your-application.jar即可。若应用通过自定义脚本(如start-app.sh)启动,可直接在脚本中添加JVM参数:
#!/bin/bash
# 设置内存参数
JAVA_OPTS="-Xms1g -Xmx2g -Xmn512m -XX:+UseG1GC"
# 启动应用
java $JAVA_OPTS -jar /path/to/your-application.jar
保存后赋予脚本执行权限(chmod +x start-app.sh),再运行脚本即可。
若应用通过systemd管理(如your-application.service),需修改服务文件:
sudo nano /etc/systemd/system/your-application.service;[Service]部分添加Environment参数,并修改ExecStart命令:[Service]
Environment="JAVA_OPTS=-Xms2g -Xmx4g -XX:MetaspaceSize=512m -XX:MaxMetaspaceSize=1g"
ExecStart=/usr/bin/java $JAVA_OPTS -jar /path/to/your-application.jar
systemd配置(sudo systemctl daemon-reload),并重启服务(sudo systemctl restart your-application)。-Xmx设置为8GB(占50%),避免占用过多内存导致系统卡顿;-Xmx设置为4GB(占50%),预留足够内存给系统和其他进程。-XX:NewRatio=1,新生代占1/2);-XX:NewRatio=3,新生代占1/4)。-XX:MaxMetaspaceSize(如-XX:MaxMetaspaceSize=1g),避免元空间溢出。-XX:+UseParallelGC(并行垃圾回收器);-XX:+UseG1GC(G1垃圾回收器);-XX:+UseZGC(ZGC垃圾回收器,需Java 11及以上)。java -XX:+PrintFlagsFinal -version | grep -iE "MaxHeapSize|InitialHeapSize|MetaspaceSize",查看JVM参数是否设置正确。jstat -gc <pid>查看堆内存、元空间、垃圾回收等指标;top或htop查看系统整体内存使用情况;