在 CentOS 上调优 Java 性能,通常从操作系统层面、JVM 层面、应用与监控层面三方面入手。下面给你一个相对系统、可落地的调优思路。
编辑 /etc/sysctl.conf 或 /etc/sysctl.d/99-java.conf:
# 最大文件描述符
fs.file-max = 1000000
# 网络相关
net.core.somaxconn = 65535
net.core.netdev_max_backlog = 65535
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_fin_timeout = 30
# 虚拟内存
vm.swappiness = 10
vm.dirty_ratio = 10
vm.dirty_background_ratio = 5
应用配置:
sysctl -p
编辑 /etc/security/limits.conf:
* soft nofile 1000000
* hard nofile 1000000
* soft nproc 65535
* hard nproc 65535
对 Java 应用(尤其 GC 敏感)建议关闭:
echo never > /sys/kernel/mm/transparent_hugepage/enabled
echo never > /sys/kernel/mm/transparent_hugepage/defrag
永久生效(grub 或 rc.local)。
cpupower frequency-set -g performance
java -server \
-Xms4g -Xmx4g \
-XX:+UseG1GC \
-XX:MaxGCPauseMillis=200 \
-XX:+PrintGCDetails \
-XX:+PrintGCDateStamps \
-Xloggc:/var/log/java/gc.log \
-XX:+HeapDumpOnOutOfMemoryError \
-XX:HeapDumpPath=/var/log/java/heapdump.hprof \
-jar app.jar
说明:
-Xms = -Xmx:避免动态扩展开销-XX:+UseZGC
-Xmx8g
适合:
top / htop
vmstat 1
iostat -x 1
netstat -antp
jps
jstat -gcutil <pid> 1000
jmap -heap <pid>
jstack <pid>
图形化:
工具:
重点看:
如果你愿意,可以告诉我:
我可以直接给你可复制的调优方案。