IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Administration système Discussion :

Performance en écriture disque avec script PHP


Sujet :

Administration système

  1. #1
    Candidat au Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2014
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Septembre 2014
    Messages : 2
    Points : 4
    Points
    4
    Par défaut Performance en écriture disque avec script PHP
    Bonjour à tous,

    J'ai un problème de performance assez bizarre sur un script PHP utilisant la librairie SimpleXMLelement.

    Je me retrouve à parser une série d'une quinzaine de gros fichiers XML (allant de 100Mo à 400Mo) pour un volume total de 4Go.

    Je vais piocher directement les éléments qui m'intéressent avec la méthode Xpath.

    Tout fonctionne pour le mieux sauf un étrange problème de perf!

    Après avoir récupéré les infos du XML, nous les écrivions dans un fichiers à la vitesse ridicule de 100Ko/s sur notre serveur de prod! Au début
    nous pensions à un problème d'écriture sur notre RAID5. On fait des tests de vitesse d'écriture via la commande "dd" (résultat : 80Mo/s), vérifié nos paramétrages, testé sur un SSD simple, même résultat.

    Sur notre serveur de dev qui est pourtant 5x moins puissant, nous mettons 10x moins de temps (un seul disque de 10000 tr/min et on écrit à 1Mo/s)! On a vérifié le php.ini, il est identique.

    Je suis un peu à court d'idées. Si jamais vous pouviez m'aiguiller sur une solution svp

    Merci d'avance.

  2. #2
    Expert éminent sénior Avatar de frp31
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Juillet 2006
    Messages
    5 196
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juillet 2006
    Messages : 5 196
    Points : 12 264
    Points
    12 264
    Par défaut
    Un niveau de raid 5 est forcément lent mais ça n'explique pas un écart de perfs de 1 à 10 effectivement.

    par contre comment sont gérés ces 4Go de fichiers ?
    sont ils traités en séquences ? ou en parallel ?

    dans le second cas la mémoire sature peut etre et utilises un max de swap qui si il est sur la meme grappe ou le meme bus va provoquer des ralentissements très forts. de façon tout à fait attendue et logique.

    comment sont traité les fichiers xml en contenu ?

    il pourrait être interessant d'utiliser un système de pipe plutot que la mémoire s'il s'agit de copie de données vers le fichier final.... il peut être interessant de voir aussi comment est mounter le raid5 ajouter le softdep, ou encore l' noatime, ou le'async ou les trois ... pourait faire gagner du temps d'accès...
    sans avoir à demonter le raid.....

    si au contraire le serveur à de la ram à gaver pourquoi ne pas monter un tmpfs en ram pour l'écriture et syncroniser ce dernier avec un fichier disque à la fin de l'opération

  3. #3
    Candidat au Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2014
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Septembre 2014
    Messages : 2
    Points : 4
    Points
    4
    Par défaut
    Bonjour,

    Merci pour votre réponse.

    Alors les fichiers sont traités les uns après les autres (le script est prêt pour les traiter en simultané mais vu la lenteur avec un seul fichier... D'ailleurs quand je les exécute en simultané, le temps d'écriture est multiplié par 10 environ. La bride doit donc bien être à ce niveau).

    La mémoire max utilisée à un instant T est de 300Mo sur le plus gros fichier (SimpleXML n'étant pas réputé pour sa faible conso de mémoire :/ ). Notre serveur possède 32Go de RAM.

    Pour le XML, j'extraie les grandes sections pour les parcourir une à une et piocher l'info et l'écrire dans le fichier final. Chacune de mes variables temporaires sont détruites (pas de fuite mémoire, j'ai vérifié à ce niveau).

    J'avais envisagé d'utiliser une autre API moins gourmande traitant le XML comme un flux (API SAX) mais ça nécessite une refonte complète du script et le temps nous manque. Par ailleurs je ne sais pas si ça résoudrait notre pb étant donné que notre serveur est loin d'être surchargé et que tous les tests montre une limite au niveau de l'écriture du fichier.

    Je vais vérifier avec mes collègues concernant le "mountage" du raid et nous allons creuser les idées plus bas.

    Je ne manquerai pas de donner les résultats.

    Merci.

Discussions similaires

  1. Erreur de sécurité avec script PHP
    Par offspring dans le forum Silverlight
    Réponses: 1
    Dernier message: 23/10/2009, 14h51
  2. [DOM XML] Traiter un fichier avec script PHP ou XML?
    Par Siguillaume dans le forum Bibliothèques et frameworks
    Réponses: 4
    Dernier message: 19/02/2009, 17h42
  3. [MySQL] Erreur d'insertion avec script PHP
    Par Anthodev dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 20/09/2008, 15h00
  4. Probleme d'affichage avec script php
    Par Misoss dans le forum Langage
    Réponses: 2
    Dernier message: 22/06/2006, 19h50
  5. détection JVM installé avec script php/javascript
    Par <DYDY> dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 01/06/2006, 14h42

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo