在我使用的阿里雲主機上有觀察到開啟了一個服務nscd ,后來谷哥了下該服務的作用。了解到nscd會緩存三種服務passwd group hosts,所以它會記錄三個庫,分別對應源/etc/passwd, /etc/hosts 和 /etc/resolv.conf每個庫保存兩份緩存,一份是找到記錄的,一份是沒有找到記錄的。每一種緩存都保存有生存時間(TTL)。其作用就是在本當中增加cache ,加快如DNS的解析等的速度。
一、nscd的配置
通過編輯/etc/nscd.conf文件,在其中增加如下一行可以開啟本地DNS cache:
阿里雲配置如下:
[root@iZ250eahq29Z ~]# more /etc/nscd.conf #logfile /var/log/nscd.log threads 6 max-threads 128 server-user nscd debug-level 5 paranoia no enable-cache passwd no enable-cache group no enable-cache hosts yes positive-time-to-live hosts 5 negative-time-to-live hosts 20 suggested-size hosts 211 check-files hosts yes persistent hosts yes shared hosts yes max-db-size hosts 33554432
查看配置文件服務的軟件包名稱
$rpm -qf /etc/nscd.conf nscd-2.17-196.el7_4.2.x86_64
相關參數的解釋如下:
logfile debug-file-name
指定調試信息寫入的文件名。
debug-level value
設置希望的調試級別。
threads number
這是啟動的等待請求的線程數。最少將創建5個線程。
server-user user
如果設置了該選項,nscd將作為該用戶運行,而不是作為root。如果每個用戶都使用一個單獨的緩存(-S參數),將忽略該選項。
enable-cache service <yes|no>
啟用或禁用制定的 服務 緩存。
positive-time-to-live service value
設置 service 在指定緩存中正的項目(成功的請求)的TTL(存活時間)。 Value 以秒為單位。較大的值將增加緩存命中率從而減低平均響應時間,但是將增加緩存的一致性問題。
negative-time-to-live service value
設置 service 在指定緩存中負的項目(失敗的請求)的TTL(存活時間)。 Value 以秒為單位。如果存在由不在系統數據庫中的uid(用戶ID)(例如在以root身份解包linux 內核源代碼時)所擁有的文件將明顯改善性能;應該維持較小的值以降低緩存一致性問題。
suggested-size service value
這是內部散列表的大小, value 應該保持一個素數以達到優化效果。
check-files service <yes|no>
啟用或禁用檢查屬於指定 服務 的文件的改變。這些文件是 /etc/passwd, /etc/group, 以及/etc/hosts。
二、nscd 服務查看和清除
默認該服務在redhat或centos下是關閉的,可以通過services nscd start開啟。緩存DB文件在/var/db/nscd下。可以通過nscd -g查看統計的信息,這里列出部分:
nscd -g nscd configuration: 5 server debug level 34d 23h 14m 18s server runtime 6 current number of threads 128 maximum number of threads 0 number of times clients had to wait no paranoia mode enabled 3600 restart internal 5 reload count passwd cache: no cache is enabled no cache is persistent no cache is shared 0 suggested size 0 total data pool size 0 used data pool size 3600 seconds time to live for positive entries 20 seconds time to live for negative entries 0 cache hits on positive entries 0 cache hits on negative entries 0 cache misses on positive entries 0 cache misses on negative entries 0% cache hit rate 0 current number of cached values 0 maximum number of cached values 0 maximum chain length searched 0 number of delays on rdlock 0 number of delays on wrlock 0 memory allocations failed yes check /etc/passwd for changes ……………………………………………………………………………………
清除緩存
- nscd -i passwd
- nscd -i group
- nscd -i hosts
除了上面的方法,重啟nscd服務同樣可以達到清理cache的目的。
三、nscd的效果
首先要看網絡和dns服務器的能力,dns解析越慢,dns緩存的優勢就越大.比如我們在北京用的dns服務器202.106.0.20和google的dns服務器8.8.8.8速度會差不少.
如果dns服務器比較穩定,那它對效率的影響就是一個常數.這個常數有多大呢?
我簡單試了一下.在局域網內進行壓力測試,壓一個nginx下的靜態頁面,使用202.106.0.20這個dns服務器,不用dns緩存.平均一分鍾可以訪問27萬次.壓一個簡單的php頁面,平均一分鍾可以訪問22萬次.加上nscd服務后,靜態頁面平均一分鍾可以訪問120萬次,要快4倍多.php頁面平均一分鍾可以訪問50萬次,快一倍多.
如果是做搜索引擎或是一些代理服務類的項目,比如短信通道,數據推送服務,這個性能提升還是比較可觀的.但在一般的項目中,一台服務器每分鍾發22萬次請求的情況是很少見的,所以這個性能提升也微呼其微.