Erreur fatale - Trop de fichiers ouverts
J'essaie d'exécuter des Tests PHPUnit dans ma nouvelle machine, et j'ai cette erreur:
PHP Fatal error: Uncaught exception 'UnexpectedValueException' with message 'RecursiveDirectoryIterator::__construct(/usr/lib/php/pear/Fichier/Itérateur): failed to open dir: Trop de fichiers ouverts" dans /usr/lib/php/pear/Fichier/Itérateur/Usine.php:114
Le même code sur l'ancienne machine de fonctionner ainsi...
Nouvelle machine de l'environnement:
Version de PHP: PHP 5.3.21 (cli)
Plus: PHP 5.3.14
PHPUnit de sortie à chaque fois:
................EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE 65 / 66 ( 98%)
E
Time: 34 seconds, Memory: 438.50Mb
There were 50 errors:
1) XXXXXXXXXXX
PHP Fatal error: Uncaught exception 'UnexpectedValueException' with message 'RecursiveDirectoryIterator::__construct(/usr/lib/php/pear/File/Iterator): failed to open dir: Too many open files' in /usr/lib/php/pear/File/Iterator/Factory.php:114
- Êtes-vous d'oublier d'appeler
fclose
? - fclose? désolé mais je ne comprends pas vos conseil
Vous devez vous connecter pour publier un commentaire.
Cela peut être une limitation sur le serveur où le code est en cours d'exécution. Chaque système d'exploitation ne permet pour un certain nombre de fichiers ouverts/poignées/supports. Cette limite est généralement plus réduite lorsque le serveur est virtualisé. Sur un serveur Linux, vous pouvez vérifier la limite actuelle avec
ulimit -n
, si vous avez un accès root, vous pouvez l'augmenter avec la même commande. Je suppose que s'il existe une méthode pour Windows server. Sinon, il n'ya pas beaucoup que vous pouvez faire à ce sujet (à l'exception de demander à votre hébergeur ou de l'administrateur pour l'augmenter).Plus configurable limitations:
ulimit -n
(j'ai même essayé de 1 000 000). Le problème mis à mal dans la logique des classes PHP j'ai été le tester. Pour ce que ça vaut, j'ai été en utilisant Laravel et avait une Usine d'État qui a retourné une non-valeur scalaire sans l'aide de la fermeture de la syntaxe; j'ai résolu le problème en utilisant la fermeture de la syntaxe, et puis unulimit -n
de2048
avait beaucoup.En php, avant l'exécution, essayez cette
setUp()
etsetUpBeforeClass()
méthodes. Exécuter manuellement sur le terminal avant de lancer les tests unitaires ne fonctionne cependant.Comment pouvez-vous ouvrir fichier limite (Linux ou mac OS):
Résout le problème avec
phpunit
ou/etphpdbg
etWarning: Uncaught ErrorException: require([..file]): failed to open stream: Too many open files in [...]
Ne pas stocker DirectoryIterator objets pour plus tard; vous obtiendrez un message d'erreur disant "trop de fichiers ouverts" lorsque vous stockez plus que le système d'exploitation (limite de 256 ou 1024).
Par exemple, cela donnera une erreur si le répertoire a trop de fichiers:
Sans doute, cette approche est gourmande en mémoire ainsi.
source: http://php.net/manual/pt_BR/directoryiterator.construct.php#87425
Après "réveiller" mon ordinateur est en mode veille, je suis tombé sur ce problème.
Le redémarrage de php-fpm comme il fixe. Classique éteindre & retour sur la solution.
sudo /etc/init.d/php-fpm restart
Je pense que cela peut être lié à l'extension xdebug qui j'ai récemment ajouté à php.