2026-10-31·by Sijie Wang

JVM Tuning by Load Test

JVM 压测调优:粗讲笔记

是什么。 通过压测找到 JVM 层面的瓶颈,调参数让服务在目标负载下达标。默认参数不一定适合你的负载,没有压测数据就调,是凭感觉。

粗流程。 先定验收目标:吞吐(QPS 是 Queries Per Second,每秒查询数;TPS 是 Transactions Per Second,每秒事务数)、延迟(p99 就是 99% 的请求延迟低于这个值)、错误率、资源上限。再逐步加压找拐点,看延迟和错误率从哪开始恶化。先区分瓶颈:应用本身慢,还是 JVM 层面(GC 停顿、堆不够、线程打满)。

调优点名。 堆大小(Xms/Xmx)、GC 选型(G1、ZGC、Parallel 各自适合的场景)与 GC 目标(比如 MaxGCPauseMillis)、线程池和连接池、Metaspace、预热和 CodeCache。

发压力的工具,点名。 Apache JMeter:老牌,GUI 编脚本,协议多,重,分布式要搭。k6:JavaScript 写脚本,命令行跑,轻,适合放进 CI。Gatling:Scala DSL,单机并发能力强,报告漂亮。wrk 和 hey:极简款,快速摸上限,不适合编复杂场景。

看 JVM 的工具,点名。 GC 日志(-Xlog:gc*):第一手证据,看停顿和回收频率。JFR,Java Flight Recorder:JDK 自带,低开销事件记录,配 JDK Mission Control 看。jps:列出跑着的 Java 进程。jstat:实时看 GC 和堆统计。jinfo:看或者改运行中 JVM 的配置。jmap:堆转储和堆直方图,找内存泄漏。jstack:线程转储,看死锁和卡住的线程。jcmd:万能诊断入口。jconsole 和 VisualVM:图形化入门。jhsdb:拿堆转储离线分析。async-profiler 加火焰图:定位 CPU 和内存热点。Arthas(阿里巴巴):不用重启的线上诊断,dashboard 一屏看线程、堆、GC、运行时信息。

一条规矩。 一次只改一个变量,改完重测。目标是业务指标,不是参数本身。

about this entry

One of sijie's wiki entries. The AI on this site is grounded in the same corpus and answers in sijie's voice, with citations back to entries like this one — answering costs sijie money, so it waits behind a code: enter an access code →