在 Debian 上优化 Java 性能,通常可以从系统层面、JVM 层面、应用层面三个维度来做。下面给你一份比较实用的优化清单。
java -version
编辑 /etc/sysctl.conf:
# 提高文件描述符
fs.file-max = 1000000
# 网络性能
net.core.somaxconn = 65535
net.ipv4.tcp_tw_reuse = 1
应用后:
sysctl -p
/etc/security/limits.conf:
* soft nofile 100000
* hard nofile 100000
apt install linux-tools-common
cpupower frequency-set -g performance
示例(JDK 17):
java -XX:+UseG1GC -Xms2g -Xmx2g -jar app.jar
高并发低延迟:
java -XX:+UseZGC -Xmx4g -jar app.jar
避免频繁 GC:
-Xms = -Xmx
示例:
-Xms4g -Xmx4g
-XX:+HeapDumpOnOutOfMemoryError
-XX:HeapDumpPath=/var/log/java/heap.hprof
-XX:-TieredCompilation # 极端性能场景
-Djava.security.egd=file:/dev/./urandom
/etc/systemd/system/app.service:
[Service]
User=app
LimitNOFILE=100000
ExecStart=/usr/bin/java -Xms2g -Xmx2g -jar /opt/app.jar
systemctl daemon-reexec
systemctl restart app
apt install openjdk-17-dbg
常用:
jstack:线程分析jmap:内存分析jstat -gcutilarthas(强烈推荐)curl -O https://arthas.aliyun.com/arthas-boot.jar
java -jar arthas-boot.jar
| 问题 | 可能原因 |
|---|---|
| CPU 高 | 死循环 / GC 频繁 |
| 内存涨 | 内存泄漏 |
| 响应慢 | 线程阻塞 / IO |
| OOM | Xmx 太小 |
如果你愿意,可以告诉我:
我可以给你一套可直接用的优化参数。