CentOS 上 Java 内存管理配置指南
一 核心原则与快速示例
java -Xms4g -Xmx4g -jar app.jar。-Xmn2g。-XX:+UseG1GC -XX:MaxGCPauseMillis=200)。-XX:+UseParallelGC)。-XX:+UseZGC)。二 在 CentOS 中设置内存参数的三种方式
java -Xms2g -Xmx4g -XX:+UseG1GC -jar /opt/app.jar。/etc/profile.d/java.sh 或应用启动脚本中导出变量:export JAVA_OPTS="-Xms2g -Xmx2g -XX:MaxMetaspaceSize=512m";随后在脚本中使用 java $JAVA_OPTS -jar app.jar。/etc/systemd/system/myapp.service):[Service]
ExecStart=/usr/bin/java -Xms2g -Xmx2g -XX:+UseG1GC -jar /opt/app.jar
Environment="JAVA_OPTS=-Xms2g -Xmx2g"
执行 systemctl daemon-reload && systemctl restart myapp 使配置生效。三 系统层面的配合与资源限制
vm.swappiness 调至 10–30,降低对 Swap 的依赖(编辑 /etc/sysctl.conf 并执行 sysctl -p)。ulimit -n 65535 临时生效,或在 /etc/security/limits.conf 永久配置。vm.overcommit_memory=1,避免 OOM Killer 误杀。-m 限制)。JAVA_OPTS(例如 /etc/tomcat/tomcat.conf 或 bin/catalina.sh 中的 JAVA_OPTS 赋值)。四 监控与调优流程
top/htop、free -h 观察整体内存与 Swap。jstat -gcutil <pid> 1000 观察 GC 频率与停顿;jstack <pid> 分析线程状态与锁竞争;jmap -dump:live,format=b,file=heap.hprof <pid> 导出堆转储(谨慎使用)。-XX:+PrintGCDetails -XX:+PrintGCDateStamps -Xloggc:/var/log/java/gc.log -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=5 -XX:GCLogFileSize=100M。五 常见坑与建议
StackOverflowError,需结合并发量与压测确定。