Forum Programmation.c Trop de fichiers ouverts ...

Posté par  .
Étiquettes : aucune
0
1
déc.
2005
Bonjour,

J'ai une application qui tourne sous Linux (Mandrake) et qui ouvre en ecriture plus de 1000 fichiers. A l'execution, j'ai une erreur errno 24, qui survient apparemment lorsque trop de fichiers sont ouverts.

Peut-on modifier en C, par l'application le nombre de fichiers que le systeme peut ouvrir simultanement ?
Sinon comment configurer le systeme pour modifier ce parametrage ?

En faisant sysctl -a sous linux, j'ai pourtant fs.file-max = 32767 !!


Merci
  • # OPEN_MAX

    Posté par  . Évalué à -5.

    edit ton fichier /etc/sysctl.conf et ajoute la ligne suivante
    #define OPEN_MAX 2048 /* par exemple */

    et reboot le system.
    • [^] # Re: OPEN_MAX

      Posté par  . Évalué à 3.

      N'importe quoi ... !!
      Extrait de mon /etc/sysctl.conf:

      # /etc/sysctl.conf - Configuration file for setting system variables
      # See sysctl.conf (5) for information.
      #
      #kernel.domainname = example.com
      #net/ipv4/icmp_echo_ignore_broadcasts=1


      Donc tu conseilles d'ajouter un commentaire ?
      De plus depuis quand doit on rebooter pour modifier des sysctl ? On est pas sous windows hein ...
      Jette donc un oeil à la page de man de sysctl(8) et plus précisément à l'option '-p' .
  • # Piste à suivre ?

    Posté par  . Évalué à 4.

    Bon, grosso modo:

    [gco@gc]:~% ulimit -a |grep file
    -f: file size (blocks) unlimited
    -c: core file size (blocks) 0
    -n: file descriptors 1024
    -x: file locks unlimited


    Visiblement, il s'agit donc des limites utilisateurs de ton système qui semblerait bloquantes. Pour plus d'info sur la commande ulimit, man bash car il s'agit d'un builtin du shell.

    La page de man indique que l'utilisateur normal ne peut changer ses limites. En effet:

    [gco@gc]:~% ulimit -n 2048
    ulimit: value exceeds hard limit

    Donc il faut le faire en root, ce qui tout de suite passe mieux:

    [root@gc]:/home/gco# ulimit -n 8192
    [root@gc]:/home/gco# ulimit -n
    8192


    Vu qu'il n'est pas très sur de laisser tourner un programme en root sans raison, je te recommande d'agir ainsi:

    1/ lancement en root
    2/ setrlimit()
    3/ setuid(); setgid()

    En espérant que cela règle ton problème.
    Sinon, si tu veux pas t'emmerder avec tout ça, il y a /etc/security/limits.conf (man 5 limits.conf).
  • # Trop de fichiers ouverts ...

    Posté par  . Évalué à 6.

    Salut,

    Juste par curiosité: tu fais quoi pour avoir plus de 1000 fichiers ouverts en
    simultané ? C'est énorme quand meme...

    a+
    Xavier

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.