19 octobre 2011
publié par 
Lorsque le moteur HFSQL Client/Serveur est installé sur un serveur Linux, l'accès à un fichier (lecture, exécution d'une requête, ouverture de fichier, sauvegarde ...) peut se solder par le retour "too many open file" remonté par le mécanisme de sécurité HFSQL.

En effet, contrairement à un serveur sous Windows un serveur Linux est par défaut limité en nombre de "handles" pouvant être alloués pour tous les fichiers ouverts.

Les réglages à apporter au serveur afin d'augmenter le nombre de handles disponibles sont décrits dans la FAQ 4345.

Se pose donc la question de l'évaluation du nombre de handles nécessaires pour éviter ce retour "too many open file". Il dépend de chaque application, du nombre de fichiers, du nombre de bases de données :
  • 1 handle par fichier physique (.fic, .ndx, .mmo, .ftx), donc jusqu'à 4 par fichier logique décrit dans l'analyse,
  • 7 handles par bases de données,
  • 1 handle par client connecté par base de données,
  • 50 handles pour la gestions interne du moteur HFSQL Client/Serveur.

Par exemple un serveur avec deux bases, une base avec 900 fichiers et une base avec 50 fichiers, avec une moyenne de 150 utilisateurs connectés simultanément aux deux bases :

700x2+150x3+50x4 : base de 900 fichiers, 700 données et index, 150 avec mémo en plus, 50 avec mémo et index full-text
40x2+10x3 : base de 50 fichiers : 40 sans mémos et 10 avec mémos
7 x 2 : handles pour chaque base
150 x 2 : handles pour chaque utilisateur sur chaque base
50 : handles pour la gestion interne
1400+450+200+80+30+14+300+50 = 2524 handles sont donc nécessaires pour le serveur HFSQL.

Il faut donc au minimum 2524 handle pour l'utilisateur Linux qui exécute le service (deamon) "manta" (root par défaut). Il faut ajouter à ce nombre les handle qui seront nécessaires à cet utilisateur pour effectuer d'autres opérations sans rapport avec HFSQL, à déterminer en fonction des autres tâches du serveur Linux.

Voici quelques commandes Linux utiles sur ce sujet :
  • Connaître le nombre de handles d'un processus à un moment donné :
    lister : ls -l /proc/<pid>/fd/*
    compter : ls -l /proc/<pid>/fd/* | wc -l
    (dans cette ligne le dernier paramètre est la lettre "L" en minuscule)
    <pid> étant le numéro de pid du process dont on veut la liste des handles
  • Connaître le PID d'un processus (manta) : ps -ef | grep manta


< Retour