增長squid的filedescriptors

Squid中的FileDescriptor解釋:
 即文件描述符,是一個簡單的整數,用以標明每個被進程所打開的文件和socket。第一個打開的文件是0,第二個是1,依此類推。
 
遇到的現象和問題:
 Unix/Linux操做系統一般給每一個進程能打開的文件數量強加一個限制。更甚的是,一般有一個系統級的限制。能夠在命令行中用ulimit -a命令查看,多數程序運行時,報出"too many openfiles"或本例中的squid的狀況都與系統中「open files」環境參數有關,也就是ulimit -n。
 由於squid 的工做方式,文件描述符的限制可能會極大的影響性能。當squid 用完全部的文件描述符後,它不能接收用戶新的鏈接。也就是說,用完文件描述符致使拒絕服務。直到一部分當前請求完成,相應的文件和socket 被關閉,squid 不能接收新請求。當squid發現文件描述符短缺時,它會發布警告。
 好比咱們此次遇到的「WARNING! Your cache is running out of filedescriptors」
 
檢查當前的squid配置:
 執行squidclient mgr:info命令能夠查看當前squid的全部運行時參數,其中squidclient mgr:info | grep 'file desc'就能夠看到關於文件描述符的配置了,例如:
 socket

        Maximum number of file descriptors:   16384  (這個是最大數量,固然是咱們優化之後的,默認是1024,作網關代理確定不夠用了)
        Largest file desc currently in use:   1640  (當前最大使用量)
        Number of file desc currently in use: 1301  (當前使用量)
        Available number of file descriptors: 15083  (剩餘數量)
        Reserved number of file descriptors:   100  (保留數量)ide

 

  一般Squid在安裝過程當中,執行./configure時,會根據系統中ulimit -n的輸出值,來判斷其最大可用的FileDescriptor。因此,在運行./configure 以前,檢查你的系統的文件描述符限制是否合適,能給你避免一些麻煩。大多數狀況下,1024 個文件描述符足夠了。很是忙的cache可能須要4096或更多。性能


 

修改的方法:優化

 #一般狀況下,應當將FileDescriptor至少設置爲ulimit -n的2倍。
 第一步:將ulimit -n的數量先加大:ulimit -HSn 32768。這個一般有幾種方法:
 1.直接執行:ulimit -HSn 32768,但重啓OS後會失效
 2.編輯/etc/rc.local,加入一行:ulimit -HSn 32768,重啓後生效
 3.編輯/etc/security/limits.conf,重啓後生效(下面2種均可以,其區別能夠網上搜一下):
  a.*       -       nofile  32768
  b.proxy           soft    nofile          32768
   proxy           hard    nofile          32768
 4.編輯/etc/init.d/squid,在該腳本執行start()動做前,加入「ulimit -HSn 32768」
  
 第二步:將squid的filedescriptors增大,這個一般也有幾種方法:
 1.修改/etc/squid/squid.conf,將max_filedesc設置爲32768
 2.編譯安裝squid時,在執行configure前,先在命令行執行一次:ulimit -HSn 32768
 3.編譯安裝squid時,在執行configure時,加上--with-maxfd=32768 參數
 
 相比較之下,固然是第一種簡單了 :)ui

相關文章
相關標籤/搜索