如何提高 nscd 的記憶體命中率?
**我的目標:**讓 nscd 在多餘的記憶體中維護一個相當大的 DNS 記憶體,因為我有它可用。
描述:
我有一個網路伺服器,它擁有廣泛分散但重複性很高的使用者群。它有足夠的記憶體,所以我想我會通過記憶體查找來提高響應時間,但據
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 changes
可能導致 6% 命中率的一個重要因素是它顯然只記憶體了 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 查找被記憶體,但查看似乎不是的“目前記憶體值數量”也發生了。
您的網路伺服器的哪一部分甚至在進行 DNS 查找?大多數網路伺服器配置明確禁用每個傳入使用者的反向 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