我的目标是:让nscd在多余的内存中维护一个相当大的DNS缓存,因为我可以使用它。
我有一个user服务器,它具有广泛分散但重复次数高的用户群。它有足够的内存,所以我想通过缓存查找来提高响应时间,但根据nscd -g,我的缓存命中率只有6% (这意味着nscd很可能会为缓存引入更多的延迟保存,或者查看缓存中永远找不到的条目,而不是通过网络阻止):
hosts cache:
yes cache is enabled
yes cache is persistent
yes cache is shared
211 suggested size
216064 total data pool size
2328 used data pool size
36000 seconds time to live for positive entries
20 seconds time to live for negative entries
4455 cache hits on positive entries
0 cache hits on negative entries
17357 cache misses on positive entries
42348 cache misses on negative entries
6% cache hit rate
17 current number of cached values
40 maximum number of cached values
3 maximum chain length searched
0 number of delays on rdlock
0 number of delays on wrlock
0 memory allocations failed
yes check /etc/hosts for changes6%命中率的一个很大的贡献者可能是这样一个事实,那就是它只缓存了17个条目。执行strings /var/db/nscd/hosts显示,它创建的主机缓存项主要用于我们内部网络上的计算机。有这些缓存是很好的,因为每天重新发布的网站可能会加快,但我的目标是加快最终用户体验,而不作出任何真正的配置改变。
这是nscd.conf的相关部分:
threads 10
server-user nscd
debug-level 0
paranoia no
[.....snip......]
enable-cache hosts yes
positive-time-to-live hosts 36000
negative-time-to-live hosts 20
suggested-size hosts 10657
check-files hosts yes
persistent hosts yes
shared hosts yes
max-db-size hosts 33554432基本上,尽管我已经将主机缓存上的正TTL设置为高得令人难以置信,但我还是需要了解我的主机缓存是如何如此小的。我确信,是少量的实际缓存条目导致了命中率如此之低。
我假设是因为命中率是6%,但我的正TTL相当大,这意味着我当前的工作负载正在执行DNS主机查找,但它们只是没有保存。我不知道为什么这些没有被保存,也不知道下一步要检查什么。我原以为现在会有一个相当大的DNS缓存。
即使命中率保持较低(即:客户端没有像我想象的那样经常重复),我仍然希望那些DNS查找会被缓存,但是查看“缓存值的当前数量”,这似乎也没有发生。
发布于 2013-12-08 01:38:27
您的even服务器的哪个部分甚至正在进行DNS查找?大多数for服务器配置显式地禁用每个传入用户的反向DNS查找,以提高速度(因为DNS在一般情况下是缓慢的)。
正如Patrick指出的,nscd正在做正确的事情,尊重积极的TTL价值观。是的,您可以重写它(unbound可以让您轻松地做到这一点,只需修改server.cache-min-ttl,并警告您出于同样的原因将其增加到1小时以上)。但是,您的查询可能主要是rDNS,这通常会有较长的TTL。
此外,由于您的maximum number of cached values是如此之低,我想指出,您几乎没有任何流量。
如果您确实关心用户经常重复的地方,我建议您在nscd之外登录,而不再担心它。
编辑(2013/12/09):nscd -g托管来自dev.gentoo.org的统计数据(评论中没有块):
nscd configuration:
4h 8m 43s server runtime
hosts cache:
yes cache is enabled
no cache is persistent
no cache is shared
422 suggested size
1108744 total data pool size
966632 used data pool size
600 seconds time to live for positive entries
20 seconds time to live for negative entries
67878 cache hits on positive entries
2479 cache hits on negative entries
9464 cache misses on positive entries
4276 cache misses on negative entries
83% cache hit rate
6951 current number of cached values
7641 maximum number of cached values
33 maximum chain length searched
1 number of delays on rdlock
0 number of delays on wrlock
0 memory allocations failed
yes check /etc/hosts for changes发布于 2014-01-04 22:35:27
这个参数:
是的缓存是共享的
允许应用程序在nscd的缓存中访问,并且不会记录此类活动。这是预期的、最有效的行为。
将其设置为“否”,您将看到您的命中率大幅上升,但速度要慢一些。
请参阅:http://alpacapowered.wordpress.com/2013/03/08/nscd-dns-caching-and-postfix/comment-page-1/#comment-1374
发布于 2013-12-10 14:35:21
这可能有点离题,但与使用nscd不同,您可以切换到sssd (我认为它是后续的)。
我正在SUSE LinuxEnterpriseServer11.3(完全支持)上使用它,我很高兴我做了这个切换。与nscd相比,它有更多更细粒度的配置选项,而且还有远远超出nscd所能实现的功能。
至少我想值得一看:https://fedorahosted.org/sssd/
https://unix.stackexchange.com/questions/97448
复制相似问题