🔗 功能:dnsserver 辅助程序(已弃用)
- 状态:已弃用。
- 版本:所有。
🔗 详细信息
dnsserver 辅助程序现已被更快的内部 DNS 客户端取代。您不应运行外部 DNS 进程。
🔗‘‘dnsserver’’是什么?
dnsserver 是由 squid 派生的一个进程,用于从域名解析 IP 地址。这是必要的,因为 gethostbyname(3) 函数会阻塞调用进程,直到 DNS 查询完成。
Squid 必须始终使用非阻塞 I/O,因此 DNS 查询是在主进程外部实现的。dnsserver 进程不缓存 DNS 查询,缓存是在 squid 进程内部实现的。
Squid-2.3 在主 Squid 二进制文件中集成了内部 DNS 客户端。它速度更快,并且可以根据流量水平进行扩展,而无需重新配置。如果您有理由使用旧式 dnsserver 进程,您可以在 ./configure 时使用 –disable-internal-dns 进行构建。但是,如果您发现内部 DNS 进程的工作方式不符合您的预期,我们建议您提交一个 bug。
🔗 配置选项
- cache_dns_program
- dns_children
- positive_dns_ttl
- negative_dns_ttl
- min_dns_poll_cnt
🔗 故障排除
🔗 dnsSubmit: 队列过载,正在拒绝 blah
这意味着您正在使用外部 dnsserver 进程进行查找,并且所有进程都已忙碌,Squid 的待处理队列已满。每个 dnsserver 程序一次只能处理一个请求。当所有 dnsserver 进程都忙碌时,Squid 会对请求进行排队,但仅限于一定程度。
要缓解此情况,您需要(1)通过更改配置文件中的 dns_children 值来增加 dnsserver 进程的数量,或者(2)切换到使用 Squid 的内部 DNS 客户端代码。
请注意,在某些版本中,Squid 将 dns_children 限制为 32。要将其增加到该值以上,您需要编辑源代码。
🔗 我的 dnsserver 平均/中位数服务时间似乎很高,如何减少它?
现在使用内置于 Squid 的内部 DNS 解析器。它不受单请求-响应阻塞的限制。
首先,通过查看 CacheManager 的 dns 输出,了解您是否有足够的 dnsserver 进程在运行。理想情况下,您应该看到第一个 dnsserver 处理了大量请求,第二个处理的请求少于第一个,依此类推。最后一个 dnsserver 应该服务了相对较少的请求。如果没有明显的递减趋势,那么您需要在配置文件中增加 dns_children 的数量。如果最后一个 dnsserver 的请求数为零,那么您绝对有足够的进程。
影响 DNS 服务时间的另一个因素是您的 DNS 解析器的距离。通常我们不建议在同一台主机上运行 Squid 和 Resolver。您应该尝试使用同一局域网内不同主机上的 DNS 解析器。如果您的 DNS 流量必须通过一个或多个路由器,这可能会导致不必要的延迟。
🔗 我有一些未使用的 dnsserver 进程,我应该在“squid.conf”中降低数量吗?
dnsserver 进程最初由 squid 使用,因为用于将网站名称转换为其互联网地址的 gethostbyname(3) 库例程会阻塞,直到函数返回(即,调用它的进程必须等待回复)。由于只有一个 squid 进程,每次调用该例程时,所有使用缓存的用户都必须等待。这就是为什么 dnsserver 是一个单独的进程,以便这些进程可以阻塞,而不会在 squid 中引起阻塞。
非常重要的是要有足够多的 dnsserver 进程来应对您将需要的所有访问,否则 squid 会偶尔停止。一个经验法则是确保您至少拥有您的系统上 squid 曾经需要过的最大数量的 dnsservers,并且可能再增加两个以确保安全。换句话说,如果您只见过最多三个 dnsserver 进程在使用中,那么至少设置五个。请记住,一个 dnsserver 很小,如果未使用,它将被交换出去。
导航:站点搜索,站点页面,类别,🔼 向上