Назад | Перейти на главную страницу

У Squid заканчиваются файловые дескрипторы на CentOS 7

Я запускаю Squid 3.3 (EPEL) на CentOS 7, и недавно я получил следующее сообщение об ошибке в моем 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% ЦП или использует почти всю системную память более чем на 90%, в результате чего скорость Интернета падает до уровня сканирования или просто зависает на неопределенное время. Завершение процесса и перезапуск разрешают его, но в конечном итоге это повторится снова.

У меня всего доступно 8 ГБ памяти, это параметры, связанные с памятью / кешем в моем 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