/ 摘要
你的 Valkey 服务器显示 CPU 100%。它饱和了吗?光看这个数字你无法判断,而且这并不是监控的 bug。Valkey 的主线程和 I/O 线程会忙等待任务。一个在等待的线程,消耗 CPU 的方式和一个在工作的线程完全一样。在一个已报告的案例中,吞吐量从 217K QPS 涨到 452K QPS,翻了一倍,而主线程 CPU 全程平稳地停在接近 100%,总 CPU 固定在 400%。所有建立在这个数字上的告警、仪表盘和自动扩缩策略,读到的都是噪声。Valkey 9.1 给出了答案:used_active_time_main_thread 和 used_active_time_io_thread_N,它们在单调时钟上用墙上时间减去忙等待和阻塞 epoll 的时间来度量,让剩余容量真正可见。
这场分享会用 INFO 构建真正的饱和度信号:
- 用 active-time 的差值得到每个线程的真实利用率
- 用 eventloop_duration_sum 减去 eventloop_duration_cmd_sum,把 I/O 和命令执行分开
- 用 latencystats 百分位数抓住平均值掩盖的问题
然后据此调整 I/O 线程数,并以 log-format json 输出结果。听完之后,你将能回答“我还有多少余量?”,并让那个从来没告诉过你真相的 CPU 告警退休。