在 CentOS 上优化 Java 配置,通常可以从 JVM 参数、系统内核、资源限制、GC 策略、监控方式 几个层面来做。下面按实用场景给你一套常见优化思路。
java -version
根据服务器内存合理分配(例如 8G 内存):
-Xms4g
-Xmx4g
✅ 建议:Xms = Xmx,避免动态扩容导致 GC 抖动
-XX:+UseG1GC
适合大多数服务
-XX:+UseZGC
-Xlog:gc*:file=/var/log/java/gc.log:time,level,tags
-XX:MetaspaceSize=256m
-XX:MaxMetaspaceSize=512m
如果是 Docker / K8s:
-XX:+UseContainerSupport
-XX:MaxRAMPercentage=75.0
ulimit -n
修改:
/etc/security/limits.conf
* soft nofile 65535
* hard nofile 65535
swapoff -a
或降低 swappiness:
sysctl vm.swappiness=10
/etc/sysctl.conf
net.core.somaxconn = 65535
net.ipv4.tcp_tw_reuse = 1
vm.max_map_count = 262144
sysctl -p
[Service]
LimitNOFILE=65535
Environment="JAVA_OPTS=-Xms4g -Xmx4g -XX:+UseG1GC"
systemctl disable firewalld
top
jps
jstat -gcutil <pid> 1000
jmap -heap <pid>
java -Xms4g -Xmx4g \
-XX:+UseG1GC \
-XX:MaxGCPauseMillis=200 \
-Xlog:gc*:file=/var/log/java/gc.log \
-XX:+HeapDumpOnOutOfMemoryError \
-XX:HeapDumpPath=/var/log/java/heap.hprof \
-jar app.jar
如果你能告诉我:
我可以给你一套 更精准的配置模板。