這兩天作壓力測試的時候發現,用webbench壓域名要比壓ip地址慢好幾倍,並且壓域名的時候nginx併發量也很低.反覆測試了好多遍,懷疑時間是花在dns解析上.在/etc/hosts中作手動解析:php
以後再壓,速度果真正常了.
dns解析爲何會慢呢?linux的dns緩存有什麼不一樣呢?上網查了一下發現linux自己是沒有dns緩存的,想使用dns緩存的話須要本身安裝一個服務程序NSCD(name service cache daemon).
linux
1 |
apt-get install nscd |
修改配置文件/etc/nscd.conf,開啓dns緩存,修改這一行nginx
1 |
enable -cache hosts yes |
這個服務除了dns緩存以外還能夠緩存passwd,group,servers.這幾個東西的緩存暫時用不到.
重啓nscd服務web
1 |
service nscd restart |
以後發現不須要作手動解析,訪問速度回升到用ip地址同樣了.緩存
###服務器
4.修改dns解析文件網絡
請在/etc/resolv.conf文件中添加:options timeout:1 attempts:1併發
在須要經過域名與外界進行數據交互的時候,dns緩存就派上用場了,它能夠減小域名解析的時間,提升效率.例如如下狀況:
使用爬蟲採集網絡上的頁面數據,
使用auth2.0協議從其餘平臺(如微博或QQ)獲取用戶數據,
使用第三方支付接口,
使用短信通道下發短信等.app
首先要看網絡和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萬次請求的狀況是不多見的,因此這個性能提高也微呼其微.
但在追求極限的道路上,每一小步都相當重要噢~ide