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