一、JVM参数调优
- 内存配置
- 设置初始堆(-Xms)和最大堆(-Xmx)为相同值,避免动态扩展开销,如
-Xms4g -Xmx4g。
- 根据物理内存调整,建议不超过物理内存的3/4,预留部分内存给系统和其他进程。
- 垃圾回收器选择
- 大内存堆(>4GB)选G1:
-XX:+UseG1GC,可设置最大GC停顿时间(如 -XX:MaxGCPauseMillis=200)。
- 多核CPU、高吞吐量场景选Parallel GC:
-XX:+UseParallelGC。
- 内存区域比例
- 调整新生代与老年代比例(-XX:NewRatio,默认2,即老年代占2/3)。
- 调整Eden区与Survivor区比例(-XX:SurvivorRatio,默认8,即Eden占8/10)。
- 其他参数
- 启用GC日志:
-XX:+PrintGCDetails -XX:+PrintGCDateStamps,便于分析。
- 禁用偏向锁(Java 15+默认禁用):
-XX:-UseBiasedLocking。
二、系统级优化
- 内核参数调整
- 增加文件描述符限制:编辑
/etc/security/limits.conf,设置 * soft nofile 65535。
- 优化网络参数:
net.ipv4.tcp_max_syn_backlog=8192、net.core.somaxconn=1024。
- 资源管理
- 关闭Swap(若内存充足):
swapoff -a,或调整 vm.swappiness=1。
- 使用ZRAM压缩内存交换(需安装):减少磁盘I/O。
三、工具与监控
- JVM监控工具
- 命令行:
jstat(监控GC)、jmap(生成堆转储)、jstack(线程分析)。
- 图形化:
jvisualvm、JConsole,实时查看内存和线程状态。
- APM工具
- Prometheus + Grafana:监控系统指标和JVM性能。
- Arthas:动态追踪Java应用运行状态,排查性能问题。
四、注意事项
- 调优前需通过压测定位性能瓶颈(如CPU、内存、GC频率)。
- 生产环境修改参数后需充分测试,避免引入新问题。
- 定期分析GC日志,根据实际使用情况调整内存和GC策略。
参考来源:[1,2,3,4,5,6,7,8,9,10,11]