Supervisor 内存不足致容器重启(实战篇)

By | 2022年8月3日

客户那遇 storm 处理日志延迟较为严重问题,然后做了以下调整。

在固定 kafka 分区数 100 的情况下,spout 并发数从 30 增到 60,开始几分钟,延迟维持在10秒较合理,5分钟后再看延迟500秒了,反比 spout 并发数 30 时还高,几次测下来都是如此,但CPU利用率明显提上来了。

查看 supervisor 容器的 worker.log 日志有 “received invalid message for unknown tasks….. “警告,导致了 supervisor 容器重启,另外日志里同时伴有警告 “Thread-4 [WARN] <<<WARNING>>>: 90% of memory used: max:742M used:730。“,因此判断此问题很可能是由内存不足引起的。

映射出 supervisor 容器的 storm.yaml,然后添加如下设置:

# 对每个worker的java内存参数进行调整(注意冒号后面必须加空格,否则 supervisor 跑步起来)
worker.childopts: "-Xmx4096m"
worker.heap.memory.mb: 4096
topology.worker.max.heap.size.mb: 4096.0

更多 storm 默认参数请参考官方此配置:defaults.yaml

改好后重启 k8s supervisor 容器,检查 supervisor.log 日志,能找到 worker.childopts: “-Xmx4096m”、worker.heap.memory.mb: 4096、topology.worker.max.heap.size.mb: 4096.0 三处,说明配置生效了。

于是再次使用刚才的 spout 并发数 60 来测试,大半天过去,结果延迟维持在5秒以内,非常满意:

测试附表:

Kafka分区数StormLogSpout 数5分钟观察延迟10分钟观察延迟supervisor 进程 cpu峰值
10030(tasks:128、workers:1)10-40秒170-250秒280%
10060(tasks:248、workers:1)1-3秒1-8秒450%

Storm调优可参考:Storm调优(optimiaze)

另外,测试过程中, spout 进程数增加会导致 连不上 zookeeper,这是因为 zookeeper 默认并发连接数是60,改成0就就不受此限制了。

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注