分享

Dash‘s Blog -> Linux下解决squid的filedescriptors问题

 昵称5475 2006-02-09
VeryCD已经多处用到了squid作为反向代理,但是使用中发现squid频繁报错
CODE
WARNING! Your cache is running out of filedescriptors

起初以为是cache文件的设置问题,尝试了多种解决方案,增大cache容量,清空cache目录,都没有解决此问题。
多方求助+STFW后发现,filedescriptors即为文件描述符。
QUOTE
文件描述符是一个简单的整数,用以标明每一个被进程所打开的文件和socket。第一个打开的文件是0,第二个是1,依此类推。Unix 操作系统通常给每个进程能打开的文件数量强加一个限制。更甚的是,unix 通常有一个系统级的限制。

因为squid 的工作方式,文件描述符的限制可能会极大的影响性能。当squid 用完所有的文件描述符后,它不能接收用户新的连接。也就是说,用完文件描述符导致拒绝服务。直到一部分当前请求完成,相应的文件和socket 被关闭,squid 不能接收新请求。当squid发现文件描述符短缺时,它会发布警告。

在运行./configure 之前,检查你的系统的文件描述符限制是否合适,能给你避免一些麻烦。大多数情况下,1024 个文件描述符足够了。非常忙的cache可能需要4096或更多。在配置文件描述符限制时,我推荐设置系统级限制的数量为每个进程限制的2 倍。

在我们的Linux下运行
CODE
# ulimit -n
1024

很明显1024个file descriptors无法满足VeryCD的访问需求。
重新设置
CODE
# ulimit -HSn 65536
# ulimit -n
65536

然后重新编译安装squid,问题解决。

注:
1. 需要将ulimit -HSn 65536设置在/etc/rc.d/rc.local中,防止重启后失效
2. 我在网上找到的方法,说是还需要重新编译内linux核,但实际尝试后发现不需要
3. 参考url: http://bbs./forum/viewtopic.php?t=562142 http://www./content/fir...ge_ip_squid.htm

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多