由于交换空间不足,BIND 9.10 在 FreeBSD 10.0 上不断被终止

由于交换空间不足,BIND 9.10 在 FreeBSD 10.0 上不断被终止

在我们的一个从属 DNS 服务器 BIND(版本 bind910-9.10.0P2_3)中,经常会因以下消息而被终止/var/log/messages

Jul 30 01:00:10 cinnabar kernel: pid 602 (named), uid 53, was killed: out of swap space

该服务在 XenServer 6.2 中的 FreeBSD 10.0 VM 上运行,具有 512MB 的系统内存。

此刻pstat -m -s返回这个:

Device          1M-blocks     Used    Avail Capacity
/dev/ada0p3           512        9      502     2%

我认为这不是交换问题,它似乎是内存泄漏,但我不确定。

编辑:访问信息。

这是两台从属 DNS 服务器之一,它们仅存储来自权威服务器的区域,并充当内部用户与外部世界的递归服务器。客户端数量介于 700-1500 个并发用户之间。由于我们有一个 /21 内部空间和一个 /23 公共 IPv4 空间,并且没有来自外部世界的查询,因此防火墙甚至会阻止这些机器的端口 53。

答案1

如果您对此服务器进行任何类型的监控,最好检查在进程被终止时内存使用量是否出现峰值。然后您可以尝试找到与请求数量等的相关性。

话虽如此,这可能意味着系统上确实没有剩余内存,但最有可能的是 Bind 正在请求一个连续的内存区域,碎片化正在阻碍,而 FreeBSD 正在尝试换出一些进程来腾出空间。它可能无法换出许多页面,无法分配并触发内存不足杀手。

如果您有磁盘空间,最简单的解决方案是通过交换文件添加更多交换(不需要分区)。理想情况下,您应该限制缓存大小(Bind 默认为无无限),正如 Håkan 所建议的那样,但这可能会对性能产生影响。如果没有更多的统计数据,很难说。如今,即使是家用路由器也有 512MB 的 RAM,因此您应该考虑为同时服务 700-1500 个用户的生产服务器增加 RAM(并限制缓存)(这可能意味着每秒请求数更多,同样,如果没有更多信息,很难说)。

您还可以尝试通过以下方式调整 malloc 实现MALLOC_PRODUCTION旋钮,但我认为,在有更简单的解决方案的情况下,这太极端了。

相关内容