kafka os::commit_memory(0x00007f2e0d204000, 12288, 0) failed; error=‘无法分配内存‘ (errno=12)

如果有帮助到您,麻烦请点个赞。❤️

故障现象:

kafka报错如下,经过了多次调配jvm的内存限制,问题依旧

修复

​
增加操作系统允许创建的最大内存映射数:

sysctl -w vm.max_map_count=<number of memory maps> #default is 65536

sysctl -w vm.max_map_count=262144

其他内核参数优化调整

net.nf_conntrack_max = 6553600
net.ipv6.conf.all.disable_ipv6 = 1
net.core.rmem_default=262144
net.core.rmem_max=2097152
net.core.wmem_default=262144
net.core.wmem_max=2097152
net.core.somaxconn = 65535


​

结论:

事实证明,Kafka 为每个日志文件、每个分区、每个主题分配了一个内存映射。当您无限期地保留 kafka 消息并且还有大量分区时,这意味着该进程达到了它可以分配的内存映射数量的限制。这在kafka 文档中有详细描述(该部分的第三个要点)。

要了解 Java 进程正在使用多少内存映射,请使用以下命令:

​​​​​​​jps -l
pmap <id of kafka process> | wc -l

这种东西只有在Kafka重启后才会发现。它展示了测试重新启动(即故障转移和故障恢复场景)的重要性——即使在生产中也是如此。出现问题时能够自信地重新启动非常重要,以便快速恢复服务。

这也表明需要对操作系统级别的值进行良好的监控,而不仅仅是应用程序级别的值或简单的 CPU 和内存消耗。在这种情况下,映射内存部分的数量只会在永久保存消息或承受更多负载时增加。了解要监控的内容至关重要,有时只能通过通读所有文档或查找可以从中学习的公共事后分析才能理解。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Cloud孙文波

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值