我在 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% CPU 或使用了几乎所有的系统内存(超过 90%),导致互联网速度下降或无限期挂起。终止进程并重新启动可以解决此问题,但最终它会再次发生。
我总共有 8 GB 的可用内存,这些是我的squid.conf
cache_dir ufs /var/spool/squid 16000 16 256
cache_mem 1024 MB
我还在使用ufdbguard
Kerberos 和 NTLM 身份验证的其他辅助插件。
有什么建议吗?
答案1
文件描述符的数量在 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