Pourquoi une erreur «Trop de fichiers ouverts» survient-elle lors de l'ouverture d'une page Web sur laquelle polipo est installé sur OS X 10.11.4?

1

J'ai installé polipo-1.1.1 mise en cache du proxy sur mon OS X 10.11.4 avec homebrew:

brew install polipo --with-large-chunks

Parfois, ouvrir des URL ( ce page par exemple) a échoué avec ce message d'erreur:

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.

J'ai mis en place ~/.polipo fichier en tant que fichier de configuration avec socksParentProxy et socksProxyType paramètres uniquement.

La valeur de ulimit -n est 4864.

Dans /usr/local/var/cache/polipo J'ai 510 dossiers et la taille totale de ces dossiers est 297 MB.

Le nombre total de fichiers ouverts avec polipo à l'aide de cette commande est 219:

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

Pourquoi cette erreur est survenue et comment puis-je empêcher cela?

Y a-t-il des configurations que j'ai manquées à configurer?

Hamid Rohani
la source

Réponses:

1

Ceci est une réponse rapide. Si vous savez quelles configurations ont provoqué ce problème, merci de poster votre réponse

Je n'ai pas trouvé la raison de cette erreur, mais je résous le problème chaque fois que cette erreur apparaît en exécutant la commande suivante:

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

Après le redémarrage polipo Par exemple, cette erreur disparaît.

REMARQUE: Cette commande devrait être exécutée EN DEHORS d'un tmux session. Dans une session tmux cela ne fonctionnera pas:

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

Si vous exécutez une telle session, détachez-la avec contrôle + b (ou toute combinaison de touches de préfixe que vous définissez) puis appuyez sur . Maintenant, lancez cette commande.

LA MEILLEURE ALTERNATIVE: j'ai utilisé reattach-to-user-namespace pour redémarrer le service polipo directement à partir de la session tmux:

$ brew install reattach-to-user-namespace

puis brew services marchera.

METTRE À JOUR: J'ai trouvé que la taille de mon cache polipo local est suffisamment grande:

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

Il y a une fonction "purge" qui est expliquée ici :

Le comportement de l'indicateur -x est contrôlé par trois variables de configuration. La variable diskCacheUnlinkTime spécifie le temps pendant lequel une entrée sur disque doit rester inutilisée avant de pouvoir être supprimée. la valeur par défaut est de 32 jours.

J'ai donc arrêté le démon polipo avec les services d'infusion:

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

Maintenant, la taille du cache local est réduite:

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

Et il semble que l'erreur soit partie.

Hamid Rohani
la source