在 Linux 上优化 Java 性能,通常可以从 JVM 参数、系统层面、代码与架构、监控与调优工具 四个方面入手。下面按实战优先级给你一个较完整的优化清单。
-XX:+UseG1GC)或 ZGC(-XX:+UseZGC)java -XX:+UseG1GC -Xms4g -Xmx4g -jar app.jar
-Xms4g -Xmx4g # 堆内存初始=最大,避免动态扩容
-XX:MaxMetaspaceSize=512m
-XX:+AlwaysPreTouch # 启动时预热内存,减少运行时抖动
-XX:ThreadStackSize=256k # 降低线程栈(高并发场景)
-XX:+UseStringDeduplication # G1下减少字符串内存
-XX:+OptimizeStringConcat
-XX:+HeapDumpOnOutOfMemoryError
-XX:HeapDumpPath=/var/log/java/heap.hprof
ulimit -n 65535
永久修改:
/etc/security/limits.conf
* soft nofile 65535
* hard nofile 65535
net.core.somaxconn = 65535
net.ipv4.tcp_tw_reuse = 1
vm.swappiness = 10
修改:
/etc/sysctl.conf
sysctl -p
swapoff -a
或:
echo 10 > /proc/sys/vm/swappiness
cpupower frequency-set -g performance
StringBuilder 替代字符串拼接new ThreadPoolExecutor(
core, max,
60s, queue,
rejectPolicy
);
避免:
Executors.newFixedThreadPool 滥用top -H
vmstat 1
iostat -x 1
jps
jstat -gcutil <pid> 1000
jstack <pid>
jmap -histo <pid>
java -jar arthas-boot.jar
java -server \
-Xms2g -Xmx2g \
-XX:+UseG1GC \
-XX:MaxGCPauseMillis=200 \
-jar app.jar
-XX:+UseZGC
-Xmx8g
-XX:ConcGCThreads=4
Linux Java 性能优化 = 合适 JDK + 正确 GC + 合理内存 + 系统参数 + 持续监控
如果你能告诉我:
我可以给你一套更精确的调优方案。