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

Jam*_*ite 5 squid file-descriptors centos7

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

WARNING! Your cache is running out of filedescriptors
Run Code Online (Sandbox Code Playgroud)

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

squidclient mgr:info | grep 'file descri'
Maximum number of file descriptors:   16384
Available number of file descriptors: 16326
Reserved number of file descriptors:   100
Run Code Online (Sandbox Code Playgroud)

Squid 也是用这个标志编译的:

--with-filedescriptors=16384
Run Code Online (Sandbox Code Playgroud)

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

2015/08/18 21:11:45 kid1| With 16384 file descriptors available
Run Code Online (Sandbox Code Playgroud)

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

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

cache_dir ufs /var/spool/squid 16000 16 256
cache_mem 1024 MB
Run Code Online (Sandbox Code Playgroud)

我还在使用ufdbguardKerberos 和 NTLM 身份验证的其他帮助程序插件。

有什么建议吗?

Mic*_*ton 2

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

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

.include /usr/lib/systemd/system/squid.service

[Service]
LimitNOFILE=65536
Run Code Online (Sandbox Code Playgroud)

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

创建此文件后,告诉 systemd:

systemctl daemon-reload
Run Code Online (Sandbox Code Playgroud)

然后重新启动鱿鱼。

systemctl restart squid
Run Code Online (Sandbox Code Playgroud)