linux開啟nscd服務緩存加速


在我使用的阿里雲主機上有觀察到開啟了一個服務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
            ……………………………………………………………………………………

 清除緩存 

  1. nscd -i passwd
  2. nscd -i group
  3. 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萬次請求的情況是很少見的,所以這個性能提升也微呼其微.


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM