Java 在 Linux 上的优化配置指南
一 基础环境准备
source 使其生效;使用 java -version 验证。java,便于快速切换版本。二 JVM 内存与 GC 调优
-Xms 与 -Xmx 建议等值,避免运行期扩缩堆带来的抖动;例如 -Xms2g -Xmx2g。-Xss,如 -Xss256k(默认通常足够,过大浪费内存)。-XX:MetaspaceSize 与 -XX:MaxMetaspaceSize 控制类元数据占用,避免无限制增长。-XX:+UseParallelGC(并行 GC)。-XX:+UseG1GC,可配合 -XX:MaxGCPauseMillis=200 设定目标停顿(仅作目标,不保证一定达成)。-XX:+UseZGC(ZGC),适合大堆与高并发服务。-XX:+UseCompressedOops 减少对象指针开销。-Xms2g -Xmx2g -XX:+UseG1GC -XX:MaxGCPauseMillis=200 -XX:+UseCompressedOops -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=512m-Xms4g -Xmx4g -XX:+UseZGC -XX:+UseCompressedOops -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=512mjstat -gc <pid> 1000;观察 YGC/YGCT、FGC/FGCT 与停顿变化。-Xlog:gc*:file=/var/log/myapp-gc.log:time,tags:filecount=5,filesize=50m-XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/var/log/myapp.hprof。三 Linux 系统层面优化
nofile(如 65536),并确认 systemd 服务也设置了 LimitNOFILE=。net.core.somaxconn(如 1024/2048),配合应用(如 Tomcat/Nginx)的 backlog 一起调整。net.ipv4.tcp_tw_reuse=1),避免在高并发短连接场景耗尽端口;注意不同内核版本与云厂商的安全策略差异。vm.swappiness(如 10–30,视负载而定),避免业务抖动。vm.min_free_kbytes(如按内存大小设置,防止 OOM killer 过早介入)。-Xms/-Xmx 协调;为 JVM 预留足够的堆外空间(元空间、线程栈、直接内存、JIT 代码缓存等)。四 监控 诊断与持续优化
top/htop、vmstat 1、iostat -x 1、netstat -s 观察 CPU、内存、I/O、网络错误与重传。jstat -gc <pid> 1000、jmap -heap <pid>、jstack <pid> 分析线程与锁竞争;配合 VisualVM/JProfiler 做 CPU/内存热点定位。-Xmx、年轻代比例(如 G1 的 -XX:G1NewSizePercent)、目标停顿;必要时切换/升级 GC。-Xss 配置。五 常见场景配置模板
-Xms2g -Xmx2g -XX:+UseG1GC -XX:MaxGCPauseMillis=200 -XX:+UseCompressedOops -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=512m -Xlog:gc*:file=/var/log/app-gc.log:time,tags:filecount=5,filesize=50m -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/var/log/app.hprof-Xms8g -Xmx8g -XX:+UseZGC -XX:+UseCompressedOops -XX:MetaspaceSize=256m -XX:MaxMetaspaceSize=1g -Xlog:gc*:file=/var/log/app-gc.log:time,tags:filecount=10,filesize=100m -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/var/log/app.hprof-Xms4g -Xmx4g -XX:+UseParallelGC -XX:ParallelGCThreads=<CPU核数> -Xlog:gc*:file=/var/log/batch-gc.log:time,tags:filecount=5,filesize=50m -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/var/log/batch.hprof