本文转载: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 .并发立马翻倍