我在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
Squid也用这个标志编译:
--with-filedescriptors=16384
Squid确认这些在启动时实际可用:
2015/08/18 21:11:45 kid1| With 16384 file descriptors available
但是这个错误不断发生.记录此错误后不久,squid进程似乎也达到100%@R_301_456@或使用几乎所有系统内存超过90%,导致Internet速度下降到爬行或无限期挂起.杀死进程并重新启动它会解决它但最终会再次发生.
我总共有8 GB的内存,这些是我的squid.conf中与内存/缓存相关的参数
cache_dir ufs /var/spool/squid 16000 16 256 cache_mem 1024 MB
我还使用ufdbguard和其他辅助插件进行Kerberos和NTLM身份验证.
任何建议?
文件描述符的数量在systemd单元文件中设置.默认情况下,这是16384,您可以在/usr/lib/systemd/system/squid.service中看到.
要覆盖它,请创建一个本地覆盖的/etc/systemd/system/squid.service,它会更改文件描述符的数量.它应该看起来像这样:
.include /usr/lib/systemd/system/squid.service [Service] LimitNOFILE=65536
不要编辑默认文件/usr/lib/systemd/system/squid.service,因为只要更新软件包,它就会被恢复.这就是为什么我们将它放在本地文件中以覆盖默认值.
创建此文件后,告诉systemd:
systemctl daemon-reload
然后重启squid.
systemctl restart squid