本文轉載:http://blog.chinaunix.net/uid-20794164-id-1840730.html
即文件描述符,是一個簡單的整數,用以標明每一個被進程所打開的文件和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'就可以看到關於文件描述符的配置了,例如:
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 (保留數量)
第一步:將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 .併發立馬翻倍