在 Linux 上优化 Java 性能,通常可以从 JVM 参数、系统层面、代码层面、监控与调优工具 四个方向入手。下面给你一个比较系统、实用的优化指南。
java -version
常见组合:
| 场景 | 推荐 GC |
|---|---|
| 低延迟 | G1 / ZGC |
| 高吞吐 | Parallel GC |
| 超大堆 | ZGC / Shenandoah |
示例(G1):
java -XX:+UseG1GC -Xms4g -Xmx4g -jar app.jar
示例(ZGC,JDK 11+):
java -XX:+UseZGC -Xmx8g -jar app.jar
-Xms4g -Xmx4g
-XX:+UseStringDeduplication # 字符串去重(G1)
-XX:+AlwaysPreTouch # 启动时预热内存
-XX:+HeapDumpOnOutOfMemoryError # OOM 自动 dump
-Xlog:gc*:file=gc.log:time # GC 日志
Java 网络应用常见瓶颈:
ulimit -n
修改:
* soft nofile 65535
* hard nofile 65535
net.core.somaxconn = 65535
net.ipv4.tcp_tw_reuse = 1
vm.swappiness = 10
应用:
sysctl -p
cpupower frequency-set -g performance
Executors.newFixedThreadPool(Runtime.getRuntime().availableProcessors());
ConcurrentHashMapsynchronizedtop
htop
vmstat 1
iostat -x 1
jps
jstack <pid>
jmap -heap <pid>
jstat -gc <pid> 1000
curl -O https://arthas.aliyun.com/arthas-boot.jar
java -jar arthas-boot.jar
如果你愿意,可以告诉我:
我可以给你针对性的调优方案。