我们在 AWS 上有一个基于 Linux 的集群,有 8 个工作线程。
操作系统版本(取自/proc/version)是:
Linux 版本 5.4.0-1029-aws (buildd@lcy01-amd64-021) (gcc 版本 7.5.0 (Ubuntu 7.5.0-3ubuntu1~18.04)) #30~18.04.1-Ubuntu SMP 10 月 20 日星期二 11:09 :25 世界标准时间 2020
最近添加了worker id 5,我们看到的问题是,在由于写入worker的突发而导致磁盘利用率较高时,安装到该worker的数据目录(/dev/nvme1n1p1)的磁盘显示性能下降就 w/sec 和 wMB/sec 而言,与其他 7 个工作线程相比,该工作线程的速度要低得多(该代理的 iops 和吞吐量减少约 40%)。
该表中的数据取自在所有代理上运行 iostat -x,在高峰时段同时开始并在 3 小时后结束。集群每秒处理约 2M 条消息。
另一个奇怪的行为是,与其他代理相比,ID 7 的代理在突发写入期间的 iops 和吞吐量高出约 40%。
工作线程类型为 i3en.3xlarge,配有 1 个 NVME SSD 7.5TB。
知道什么会导致工作 ID 5 的性能下降(或者代理 ID 7 的性能如此良好)吗?
此问题导致该集群中的消费者在高写入期间滞后,因为工作进程 id 5 进入高 iowait,并且如果某些消费者读取陷入滞后并从磁盘执行读取,则工作进程 id 5 上的 iowait 会攀升至约 70%所有消费者都开始滞后,而且生产者也会因为代理不接受的缓冲消息而出现 OOM。