Почему возникает ошибка «Слишком много открытых файлов» при открытии веб-страницы с polipo, установленным в OS X 10.11.4?

Я установил polipo-1.1.1кеширующий прокси-сервер на свою OS X 10.11.4 с помощью homebrew:

brew install polipo --with-large-chunks

Иногда открытие URL-адресов ( например, этой страницы) не удается с этим сообщением об ошибке:

504 Connect to apple.stackexchange.com:80 failed: Too many open files

The following error occurred while trying to access https://apple.stackexchange.com/questions/114514/can-the-default-permissions-on-dev-disk-be-changed:

504 Connect to apple.stackexchange.com:80 failed: Too many open files

Generated Sun, 22 May 2016 12:36:56 IRDT by Polipo on Hamids-MacBook-Pro.local:8123.

Я настроил ~/.polipoфайл как файл конфигурации только с параметрами socksParentProxyи socksProxyType.

Значение ulimit -nравно 4864.

У /usr/local/var/cache/polipoменя 510 папок, и общий размер этих папок составляет 297 MB.

Общее количество файлов, открытых polipo с помощью этой команды 219:

lsof -p $(pgrep polipo) | wc -l

Почему возникает эта ошибка и как я могу предотвратить это?

Есть ли какие-либо конфигурации, которые я пропустил?

Ответы (1)

Это быстрый ответ. Если вы знаете, какие конфигурации вызвали эту проблему, напишите свой ответ.

Я не выяснил, почему возникает эта ошибка, но я решаю проблему каждый раз, когда появляется эта ошибка, выполняя эту команду:

$ brew services restart polipo
Stopping `polipo`... (might take a while)
==> Successfully stopped `polipo` (label: homebrew.mxcl.polipo)
==> Successfully started `polipo` (label: homebrew.mxcl.polipo)

После перезапуска polipoэкземпляра эта ошибка исчезает.

ПРИМЕЧАНИЕ. Эту команду следует выполнять ВНЕ сеанса tmux. В сеансе tmux это не сработает:

$ brew services restart polipo
~/Library/LaunchAgents/homebrew.mxcl.polipo.plist: Operation not permitted
==> Successfully started `polipo` (label: homebrew.mxcl.polipo)

Если вы запускаете такой сеанс, отсоедините сеанс с помощью control+ b(или любой комбинации клавиш префикса, которую вы установили), а затем нажмите d. Теперь запустите эту команду.

ЛУЧШАЯ АЛЬТЕРНАТИВА: раньше я reattach-to-user-namespaceперезапускал службу polipo прямо из сеанса tmux:

$ brew install reattach-to-user-namespace

тогда brew servicesбудет работать.

ОБНОВЛЕНИЕ: я обнаружил, что размер моего локального кэша polipo достаточно велик:

$ du -d0 -h /usr/local/var/cache/polipo
13.8G    /usr/local/var/cache/polipo

Существует функция «очистки», которая объясняется здесь :

Поведение флага -x управляется тремя переменными конфигурации. Переменная diskCacheUnlinkTime указывает время, в течение которого запись на диске должна оставаться неиспользованной, прежде чем ее можно будет удалить; по умолчанию 32 дня.

Итак, я остановил демон polipo с помощью варочных сервисов:

$ brew services stop polipo
$ polipo -x
$ brew services start polipo

Теперь размер локального кеша уменьшен:

$ du -d0 -h /usr/local/var/cache/polipo
2.1G    /usr/local/var/cache/polipo

И вроде бы ошибка ушла.