Squid在CentOS 7上耗尽文件描述符

我在CentOS 7上运行Squid 3.3(EPEL),最近我在我的cache.log收到以下错误信息

 WARNING! Your cache is running out of filedescriptors 

我有点困惑,因为我似乎有足够的描述符可用:

 squidclient mgr:info | grep 'file descri' Maximum number of file descriptors: 16384 Available number of file descriptors: 16326 Reserved number of file descriptors: 100 

鱿鱼也编制了这个标志:

 --with-filedescriptors=16384 

鱿鱼确认这些实际上在启动时可用:

 2015/08/18 21:11:45 kid1| With 16384 file descriptors available 

但是,这个错误不断发生。 在这个错误logging后不久, squid进程似乎也达到了100%的CPU或使用几乎所有的系统内存超过90%,导致互联网速度下降到爬行或只是无限期地挂起。 杀死进程并重新启动解决它,但最终会再次发生。

我总共有8 GB的可用内存,这些是我的squid.conf中的内存/caching相关参数

 cache_dir ufs /var/spool/squid 16000 16 256 cache_mem 1024 MB 

我还使用ufdbguard和其他辅助插件进行Kerberos和NTLM身份validation。

有什么build议?

文件描述符的数量在systemd单元文件中设置。 默认情况下,这是16384,你可以在/usr/lib/systemd/system/squid.service看到。

要覆盖这个,创build一个本地覆盖/etc/systemd/system/squid.service ,它改变了文件描述符的数量。 它应该看起来像这样:

 .include /usr/lib/systemd/system/squid.service [Service] LimitNOFILE=65536 

不要编辑默认文件/usr/lib/systemd/system/squid.service ,因为每当程序包更新时它都将被恢复。 这就是为什么我们把它放在本地文件来覆盖默认值。

在创build这个文件之后,告诉systemd:

 systemctl daemon-reload 

然后重新启动鱿鱼。

 systemctl restart squid