一、首先說什麼是文件描述符,它有什麼做用?shell
文件描述符是一個簡單的整數,用以標明每個被進程所打開的文件和socket。第一個打開的文件是0,第二個是1,依此類推。Unix 操做系統一般給每一個進程能打開的文件數量強加一個限制。更甚的是,unix 一般有一個系統級的限制。bash
因 爲squid 的工做方式,文件描述符的限制可能會極大的影響性能。當squid 用完全部的文件描述符後,它不能接收用戶新的鏈接。也就是說,用完文件描述符致使拒絕服務。直到一部分當前請求完成,相應的文件和socket 被關閉,squid 不能接收新請求。當squid發現文件描述符短缺時,它會發布警告。socket
在運行./configure 以前,檢查你的系統的文件描述符限制是否合適,能給你避免一些麻煩。大多數狀況下,1024 個文件描述符足夠了。很是忙的cache可能須要4096或更多。在配置文件描述符限制時,我推薦設置系統級限制的數量爲每一個進程限制的2 倍。性能
二、怎麼突破,具體方法?ui
先查看LINUX默認的文件描述符:操作系統
# ulimit -nunix
1024進程
咱們用命令it
ulimit -HSn 65536編譯
來增大文件描述符,而後編譯安裝squid,
把ulimit -HSn 65536放到/etc/rc.d/rc.local讓啓動時加載。
如下爲轉載:
Linux
在Linux 上配置文件描述符有點複雜。在編譯squid 以前,你必須編輯系統include 文件中的一個,而後執行一些shell 命令。請首先編輯/usr/include/bits/types.h 文件,改變__FD_SETSIZE 的值:
#define _ _FD_SETSIZE 8192
下一步,使用這個命令增長內核文件描述符的限制:
# echo 8192 >; /proc/sys/fs/file-max
最後,增長進程文件描述符的限制,在你即將編譯squid 的同一個shell 裏執行:
sh# ulimit -Hn 8192
該命令必須以root 運行,僅僅運行在bash shell。沒必要重啓機器。
使用這個技術,你必須在每一次系統啓動後執行上述echo 和ulimit 命令,或者至少在squid 啓動以前。假如你使用某個rc.d 腳原本啓動squid,那是一個放置這些命令的好地方。