Debian 上 Java 优化配置指南
一 基础环境准备
sudo apt update && sudo apt install openjdk-11-jdk,随后用 java -version 验证。若需多版本并存,使用 update-alternatives 切换:sudo update-alternatives --install /usr/bin/java java /usr/lib/jvm/java-11-openjdk-amd64/bin/java 1sudo update-alternatives --config java。export JAVA_HOME=/usr/lib/jvm/java-11-openjdk-amd64,并将其加入 PATH。JAVA_OPTS="-Xms4g -Xmx4g"。二 JVM 参数优化
-Xms 与 -Xmx 设为相同值(如 -Xms4g -Xmx4g)。-XX:NewSize/-XX:MaxNewSize 或 -XX:NewRatio,以及 -XX:SurvivorRatio。-XX:+UseCompressedOops(通常默认开启)。-XX:+UseG1GC),可配合 -XX:MaxGCPauseMillis=200 与 -XX:InitiatingHeapOccupancyPercent=45 做目标暂停与触发时机调优。-XX:+UseParallelGC),可设置 -XX:ParallelGCThreads 匹配 CPU 核心数。-Xss(如 -Xss1m,视并发线程数调整)。-XX:ParallelGCThreads、-XX:ConcGCThreads 结合 CPU 与容器/虚拟机核数设置。-XX:+TieredCompilation(通常默认开启)。-XX:+UseStringDeduplication。-Xms4g -Xmx4g -XX:+UseG1GC -XX:MaxGCPauseMillis=200 -XX:InitiatingHeapOccupancyPercent=45 -XX:+UseStringDeduplication -XX:+TieredCompilation -Xss1m-Xms8g -Xmx8g -XX:+UseParallelGC -XX:ParallelGCThreads=8 -Xss1m三 系统层面优化
* soft nofile 65536、* hard nofile 65536,并确认 PAM 已启用(pam_limits.so)。sudo sysctl -w vm.swappiness=10(范围 0–100,越低越倾向保留内存)。sudo sysctl -w net.core.somaxconn=4096、net.core.rmem_max=134217728、net.core.wmem_max=134217728。四 监控 日志与持续调优
-Xlog:gc*,gc+heap=debug:file=/var/log/app-gc.log:time,tags:filecount=10,filesize=100M,结合暂停时间与晋升速率定位瓶颈。五 快速检查清单
| 优化项 | 关键配置 | 建议值或做法 |
|---|---|---|
| 安装与切换 | OpenJDK、update-alternatives | 安装 openjdk-11-jdk;用 alternatives 管理多版本 |
| 堆与新生代 | -Xms/-Xmx、-XX:NewRatio/-XX:SurvivorRatio | 固定堆(如 4g/4g);按对象生命周期调新生代 |
| GC 策略 | -XX:+UseG1GC / -XX:+UseParallelGC | 低延迟用 G1;高吞吐用 Parallel GC |
| GC 目标 | -XX:MaxGCPauseMillis、-XX:InitiatingHeapOccupancyPercent | 如 200 ms、45(按 SLA 调整) |
| 线程与栈 | -Xss、-XX:ParallelGCThreads/-XX:ConcGCThreads | 如 -Xss1m;GC 线程≈CPU 核数 |
| 运行期优化 | -XX:+UseCompressedOops、-XX:+UseStringDeduplication、-XX:+TieredCompilation | 大堆启用压缩指针与字符串去重 |
| 系统资源 | limits.conf、vm.swappiness、net.core.somaxconn | nofile 65536、swappiness 10、somaxconn 4096 |
| 文件系统 | 挂载选项 | 数据盘使用 noatime |
| GC 日志 | -Xlog:gc* | 输出到文件并滚动,便于回溯分析 |