CentOS下Java内存配置技巧
-Xms512m表示初始堆为512MB),避免应用启动时频繁申请内存。-Xmx2g表示最大堆为2GB),防止内存溢出(OOM)。-Xmn512m),新生代是对象创建和回收的主要区域,合理设置可提升GC效率(通常为堆大小的1/3~1/2)。-XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=256m),避免元空间无限膨胀导致磁盘交换。export JAVA_OPTS="-Xms512m -Xmx1024m"~/.bashrc)或系统级配置文件(如/etc/profile),添加上述JAVA_OPTS行,执行source ~/.bashrc使更改生效。systemd管理服务(如Tomcat、Spring Boot应用),编辑服务文件(/etc/systemd/system/your-service.service),在[Service]部分添加:Environment="JAVA_OPTS=-Xms512m -Xmx1024m",然后执行sudo systemctl daemon-reload并重启服务。根据应用场景选择合适的GC器:
-XX:+UseG1GC)。-XX:+UseZGC)。-XX:+UseConcMarkSweepGC)。-XX:+UseParallelGC)。启用GC日志以监控内存回收行为,便于调优:
-XX:+PrintGCDetails -XX:+PrintGCDateStamps -Xloggc:/path/to/gc.log
通过VisualVM、GCViewer等工具分析日志,关注Full GC频率、停顿时间等指标,若Full GC频繁,需调整堆大小或GC器。
-XX:ParallelGCThreads=4),可根据CPU负载调整。-XX:ConcGCThreads=2),减少GC停顿时间。堆外内存(如Direct Buffer、JNI调用)不受JVM GC管理,需通过以下方式监控:
-XX:MaxDirectMemorySize限制堆外内存大小(如-XX:MaxDirectMemorySize=512m)。NMT(Native Memory Tracking)跟踪堆外内存使用:-XX:NativeMemoryTracking=detail,通过jcmd <pid> VM.native_memory detail查看。top(查看系统内存)、jstat -gc <pid>(查看GC情况)、VisualVM(实时监控堆内存)等工具监控内存使用。-Xmx或调整新生代比例(-Xmn)。