增加squid的filedescriptors

 本文轉載:http://blog.chinaunix.net/uid-20794164-id-1840730.html

 

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'就可以看到關於文件描述符的配置了,例如:
 
        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  (保留數量)
 
  通常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 參數
  當初:我在squid啓動狀態下,修改的系統文件描述符,忘記重啓squid服務了,後來別人指點,修改的squid.conf .併發立馬翻倍

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章