Rechercher : dans
Par :

Ubuntu : too many open files

Dernière réponse le 28 avr 2009 à 02:40:11 bkrqpzef, le 27 avr 2009 à 23:33:26 
 Signaler ce message aux modérateurs

Salutation,
Voilà j'ai fais un programme en C, mais après quelques secondes d'éxécution, Ubuntu me lance :

cp: cannot create regular file `./nomdufichier': Too many open files


A partir de là mon programme fais n'importe quoi. :D
Il semble que cela soit un bridage du système d'exploitation.

Il faudrait peut etre bidouiller "/etc/security/limits.conf" ou utiliser ulimit, mais je ne sais pas trop quoi faire. xD
Merci :)
Configuration: Linux
Firefox 3.0.9

Meilleures réponses pour « Ubuntu : too many open files » dans :
Eviter d'être bloqué en cas d'erreur TOO MANY CONNECTIONS Voir Par défaut, Mysql autorise 100 connexions (150 depuis la version 5.1) au serveur ... Cela signifie que le 101ème utilisateur recevra le message d'erreur "too many connections" ... Si cela vous arrive, quelqu'en soit la raison (site web trop...
Installer les polices TrueType Microsoft VoirIl est possible de profiter des polices TrueType Microsoft sous Linux sans problème (Arial, Times New Roman, Courrier, Impact, Trebuchet MS...) Pour cela, il suffit de taper: sudo aptitude install msttcorefonts C'est tout ! Liste des...
Télécharger Outlook Connector VoirMicrosoft Outlook Connector permet d'utiliser Outlook 2003 ou Outlook 2007 afin d'accéder à vos comptes de messagerie Windows Live Hotmail ou Office Live Mail et de les gérer gratuitement, notamment les contacts. Selon les services, la...
Perl - Les fichiers VoirLa notion de filehandle On appelle filehandle (traduisez descripteur de fichier), dans un programme Perl, le nom permettant de manipuler une connexion d'entrée-sortie (les entrées-sorties standards vues précédemment sont connues par les filehandles...

1

Hikaru`, le 27 avr 2009 à 23:37:17

Bonsoir,

Ton programme est sensé ouvrir autant de fichier ? Cela ressemble joliement à une boucle infinie ça :o
Courage Sebsauvage ! Et merci pour ton blog :)
Paix et sérénité à tous !

Répondre à Hikaru`

2

bkrqpzef, le 27 avr 2009 à 23:47:30

Yo !!
Non pas de soucis du coté de la boucle infini ! :D
J'ai une variable que je peux modifier à souhait. Elle est responsable du nombre de boucles.
Au délà de 55 (valeur de la variable) l'erreur apparait.
Et ... Oui ce programme manipule beaucoup de fichiers.

Répondre à bkrqpzef

3

Hikaru`, le 27 avr 2009 à 23:55:51

En relisant l'erreur renvoyée, il te dit qu'il y a trop de fichiers ouverts.

Alors, une fois de plus, sans ton code ou du moins sans explication sur ce que tu fais avec ton soft, je ne peux pas savoir : n'oublierais tu pas de fermer tes fichiers ?
Bon, si tu fais seulement des copies... c'est étonnant. 55 fichiers en train de se copier en même temps, j'ai jamais testé. Mais ça serait étonnant.

Il te faudrait dans ce cas là gérer une file d'attente non ? (au lieu de modifier une limite imposée par l'OS, probablement avec une bonne raison, et qui de plus ne pourra pas être modifiable chez les autres - dans le cas où tu distribues ton soft).
Courage Sebsauvage ! Et merci pour ton blog :)
Paix et sérénité à tous !

Répondre à Hikaru`

4

bkrqpzef, le 28 avr 2009 à 00:02:57

Mon code fait dans les 2000 lignes et il est et sera uniquement utilisé par moi. :)
Il crée/supprime/multiplie de nombreux dossiers/fichiers etc...
Je ne peux pas alléger mon code, par contre j'aimerai bien réussir à le faire fonctionner sans être limité en écriture.

Répondre à bkrqpzef

5

fiddy, le 28 avr 2009 à 00:13:02

Salut,
Il me semble que ça se passe avec ulimit -n
Que te renvoie cette commande ?
Tu peux modifier la valeur en effectuant : ulimit -n nb

Cdlt
Google is your friend

Répondre à fiddy

6

bkrqpzef, le 28 avr 2009 à 00:24:16

bkrqpzef@bkrqpzef-power:~$ ulimit -n
1024
bkrqpzef@bkrqpzef-power:~$ ulimit -n 4096
bash: ulimit: open files : impossible de modifier la limite : Opération non permise
bkrqpzef@bkrqpzef-power:~$ sudo ulimit -n 4096
sudo: ulimit: command not found

Répondre à bkrqpzef

7

fiddy, le 28 avr 2009 à 01:33:04

Tu dois modifier ton fichier /etc/security/limits.conf en root et rajouter :

*     hard     nofile     nb

Ensuite il faut que tu te déconnectes de ta session et reconnecte.
Ton ulimit -n devrait alors valoir le nombre que tu as rajouté dans le fichier.

Cdlt
Google is your friend

Répondre à fiddy

8

bkrqpzef, le 28 avr 2009 à 01:51:01

Voici les 3 dernières lignes de /etc/security/limits.conf :

#@student        -       maxlogins       4
*     hard     nofile     unlimited
# End of file


pourtant
ulimit -n
1024


reste à 1024 après déconnexion et même après reboot. :(
Je tente avec un nombre à la place de unlimited.

Répondre à bkrqpzef

9

bkrqpzef, le 28 avr 2009 à 02:02:55

Snif,
pareil avec

#@student        -       maxlogins       4
*     hard     nofile     4096
# End of file


:
ulimit -n
1024

Répondre à bkrqpzef

10

bkrqpzef, le 28 avr 2009 à 02:16:05

Résolu avec :

* hard nofile 50000
* soft nofile 50000


Merci.
Et maintenant je lance mon programme ...

Et ça tourne... jusqu'à 73 avec une belle erreur de segmentation. :D
En tout cas plus de "too many open files"
MERCI !!!! :p

Répondre à bkrqpzef

11

 fiddy, le 28 avr 2009 à 02:40:11

Pour mettre à unlimited, il me semble qu'il faut patcher le kernel pour pouvoir mettre RLIMIT_NOFILE à RLIM_INFINITY.
Enfin si ça marche avec 5000, c'est le principal ;-))).

Sinon pour l'erreur de segmentation, là, il s'agit sûrement de ton programme. Un petit coup de gdb te permettra de localiser la ligne plus facilement.

Cdlt
Google is your friend

Répondre à fiddy
Collection CommentÇaMarche.net