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

Symfony PHP Discussion :

Problème de performance (firewall) sur serveur mutualisé


Sujet :

Symfony PHP

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2013
    Messages
    32
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2013
    Messages : 32
    Points : 13
    Points
    13
    Par défaut Problème de performance (firewall) sur serveur mutualisé
    Bonjour,
    Je rencontre un problème de performance avec Symfony sur des requêtes en ajax. Elles mettent près de 3000 ms pour aboutir ce qui me parait énorme.
    Afin de comprendre l'origine de cette lenteur, je suis allé regarder du côté de la timeline dans le profiler et je me rends compte que c'est le composant Symfony\Component\Security\Http\Firewall qui retarde la requête (2000 ms). Je précise que je suis sur un serveur mutualisé.
    Comment pensez-vous que je pourrais gagner en performance à ce niveau là ?

    Merci d'avance pour vos réponses

  2. #2
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2013
    Messages
    32
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2013
    Messages : 32
    Points : 13
    Points
    13
    Par défaut
    Problème réglé, il faut utiliser 127.0.0.1 dans la configuration au lieu de localhost. Et j'imagine après que si c'est la partie "controller" qui est lente, c'est le code du site qu'il faut modifier ?

  3. #3
    Membre expérimenté
    Homme Profil pro
    Inscrit en
    Septembre 2009
    Messages
    875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Septembre 2009
    Messages : 875
    Points : 1 313
    Points
    1 313
    Par défaut
    Si c'est lent c'est juste que tu es en environnement dev non?
    Normalement en environnement prod tu ne dois pas avoir accès a la barre de symfony
    D'ailleurs tu devrais interdire environnement dev sur ton serveur, si tu veux pas te faire "hacker" en 1 minute

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2013
    Messages
    32
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2013
    Messages : 32
    Points : 13
    Points
    13
    Par défaut
    Oui j'étais effectivement dans un env de dev, il sera évidemment retiré lors d'un accès publique du site. Je m'en servais pour comprendre comment cela se fait-il que le serveur mette 2000 ms en moyenne (d'après Tamper Data) pour répondre à des requêtes ajax (cette fois-ci sur la version prod). Bon, il est vrai que j'ai un record minimum à 465 ms, mais cela me semble déjà grand...

  5. #5
    Membre expérimenté
    Homme Profil pro
    Inscrit en
    Septembre 2009
    Messages
    875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Septembre 2009
    Messages : 875
    Points : 1 313
    Points
    1 313
    Par défaut
    si tu as apc sur ton serveur, tu peux cacher un peu de doctrine pour améliorer un peu les temps de réponse coté serveur

    config_prod.yml
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    doctrine:
        orm:
            metadata_cache_driver: apc
            result_cache_driver: apc
            query_cache_driver: apc
    Ta base de données est elle aussi sur ton serveur mutualisé? sinon veille a ce que tes requêtes ne soit pas trop nombreuses (ca se vérifie en dev, mais sur ton poste de dev :p)
    Après je vois pas trop comment augmenter le temps de réponse sans changer sur un serveur plus puissant mais je m'y connais pas spécialement non plus.

    Si tu as des soucis coté frontend
    Je te conseille d'utiliser des sites d'analyse de vitesse de page (google page speed insight par exemple)
    Qui te donnerons des tas d'indices sur la vitesse de chargement de page.
    Par exemple, tes javascripts sont ils chargés en fin de page et non dans le <head> etc...

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2013
    Messages
    32
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2013
    Messages : 32
    Points : 13
    Points
    13
    Par défaut
    Merci pour ces quelques conseils. En fait, le problème a l'air d'être due à la lenteur du temps de réponse du serveur et du script en lui-même, il n'y a pas de css qui est chargé lors de ces appels. J'ai réussi à réduire le temps à 1500 ms en changeant un peu la requête sql exécutée derrière et en passant par du json mais j'aurais vraiment aimé passer sous les 1000 ms de "pending". Malheureusement, je peux pas activer le cache apc.
    En 1500 ms, le script récupère deux entités et ajoute deux entrées dans la base. Je n'utilise qu'un seul flush... Ca me parait encore une fois élevée.

  7. #7
    Expert éminent
    Avatar de pmithrandir
    Homme Profil pro
    Responsable d'équipe développement
    Inscrit en
    Mai 2004
    Messages
    2 418
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Responsable d'équipe développement
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2004
    Messages : 2 418
    Points : 7 295
    Points
    7 295
    Par défaut
    Quoz, ne perd pas ton temps sur ces bétises... symfony n'est pas fait pour tourner sur un serveur mutualisé ni sans APC.
    C'est comme de vouloir aller en voiture a pédale sur l'autoroute.

    Je ne sais pas quelles sont tes ressources financières, mais un VPS classic 1 sur OVH coute 2€ par mois sans engagement. En 2 heures tu auras installé mysql, php, APC etc...
    Ensuite tu pourras travailler sérieusement et tu verras que tes temps de réponses vont fondre très vite.

    Que ca soit pour un projet ponctuel pour l'école ou pour un truc de plus long terme, je pense que c'est accessible.

    Bon courage.

  8. #8
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2013
    Messages
    32
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2013
    Messages : 32
    Points : 13
    Points
    13
    Par défaut
    Merci pour ta réponse ! Ca me parait être une alternative intéressante. Est-ce que tu aurais un guide que tu recommanderais au niveau de la sécurité ? Parce qu'on peut paramétrer pas mal de choses sur Apache/MySQL/PHP. J'ai notamment un script d'upload prévu sur mon site ce qui devrait occasionner des failles de sécurité si de mon côté ce n'est pas correctement configuré j'imagine.

    L'utilisation d'un cache Varnish serait approprié pour un site sous Symfony ?
    J'ai lu que le cache apc avait été remplacé depuis une récente version de PHP par des opcodes natifs et plus performants. Il y a moyen de s'en servir dans la configuration de Symfony ?

  9. #9
    Expert éminent
    Avatar de pmithrandir
    Homme Profil pro
    Responsable d'équipe développement
    Inscrit en
    Mai 2004
    Messages
    2 418
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Responsable d'équipe développement
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2004
    Messages : 2 418
    Points : 7 295
    Points
    7 295
    Par défaut
    Bonjour,

    La config par defaut devrait être assez sécurisé pour un usage courant.

    Ajoute un firewall sur ta machine pour limiter les accés aux ports, et ca devrait aller.
    Après, ca dépend le type de données que tu as forcement, mais si elles ne sont pas sensible, ne te prend pas trop le chou avec ca.

    Je n'ai jamais utilisé varnish, donc pas la moindre idée.

    Pour APC, il a été remplacé et tu peux maintenant installer APCU qui fait le lien avec les nouveaux types de cache je crois. (même pas sur que ca soit nécessaire à vrai dire, il faudrait que je regarde mes script d'install pour voir ce que j'avais fais).

  10. #10
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2013
    Messages
    32
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2013
    Messages : 32
    Points : 13
    Points
    13
    Par défaut
    Ca me dérange un peu de tout laisser tourner en root, il y aurait toutes les données stockées sur ce serveur...
    Au niveau du pare feu, j'ai laissé ouvert juste ce qu'il fallait. Niveau performance, j'arrive à tomber sous la seconde (500 ms en moyenne), c'est vrai que ça commence à devenir confortable mais je suis parti d'une base de données vierge.

    Concernant Varnish, il semblerait que c'est un cache qui remplacerait celui fourni par Symfony donc c'est vrai qu'il est plus logique de se servir de celui qui est là nativement je pense.

  11. #11
    Expert éminent
    Avatar de pmithrandir
    Homme Profil pro
    Responsable d'équipe développement
    Inscrit en
    Mai 2004
    Messages
    2 418
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Responsable d'équipe développement
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2004
    Messages : 2 418
    Points : 7 295
    Points
    7 295
    Par défaut
    Bonjour,

    Quand tu installe les package débian, centos, ubuntu, ils créé des utilisateurs correctement.
    Apache tournera en httpd ou apache du coup.

    Tu les installe en root, mais ils tournent sur un autre utilisateur.

    Pierre

  12. #12
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2013
    Messages
    32
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2013
    Messages : 32
    Points : 13
    Points
    13
    Par défaut
    D'accord je n'étais pas au courant de cette histoire d'utilisateurs créés automatiquement. En fait le problème que j'ai rencontré était par rapport au dossier cache de Symfony mais j'ai trouvé un tuto qui explique comment affecter manuellement les droits pour ce répertoire.

    J'ai encore quelques petites questions, par rapport aux mails, j'imagine qu'il y a une configuration particulière à faire ? Ca doit être un peu spécifique sur un vps ovh ?

    Concernant le temps moyen de 500 ms sur des requêtes ajax, pour être en dessous, il faut passer sur une gamme supérieure ? En plus du flush, j'envois une requête de type socket sur un serveur situé sur la même machine (localhost), peut-être qu'il n'est pas possible de faire plus rapide ?

  13. #13
    Expert éminent
    Avatar de pmithrandir
    Homme Profil pro
    Responsable d'équipe développement
    Inscrit en
    Mai 2004
    Messages
    2 418
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Responsable d'équipe développement
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2004
    Messages : 2 418
    Points : 7 295
    Points
    7 295
    Par défaut
    Bonjour,

    Sur du VPS classic 1 avec mysql et elastic search qui tourne dessus avec Symfony, j atteins 200 ms au mieux.

    Regarde du coté des requêtes SQL, c'est souvent la que c'est lent.

  14. #14
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2013
    Messages
    32
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2013
    Messages : 32
    Points : 13
    Points
    13
    Par défaut
    J'ai regardé les temps au niveau de Doctrine, c'est environ la moitié du délais.

    Par contre j'ai un soucis très gênant avec phpmyadmin, l'affichage de la base semble se baser sur un cache qui n'est pas à jour. Comment je pourrais régler ça ? J'ai essayé de désactiver l'apc comme conseillé ici : https://ma.ttias.be/running-phpmyadm...al-php-errors/
    Après redémarrage, ce n'est toujours pas à jour. J'hésite à retirer tout système de cache parce que c'est un peu perturbant finalement...
    En me loggant en console, je vois bien que je n'ai pas les mêmes informations que depuis l'interface web...

    J'utilise également un champ slug généré automatiquement mais celui-ci n'apparait pas dans la table où il est censé être généré. J'ai l'impression que c'est un attribut virtuel mais j'arrive pas à trouver comment l'obtenir avec une requête sql "classique" (Symfony le trouve sans problème). C'est possible que Symfony stocke des informations ailleurs que dans la base sql ?

    EDIT : C'est réglé, tous ces problèmes étaient en réalité dus à un fichier de conf qui n'aurait pas dû être uploadé

Discussions similaires

  1. Réponses: 1
    Dernier message: 01/06/2012, 14h05
  2. [XL-2007] Problème de performance sur serveur RDS
    Par totojordi dans le forum Excel
    Réponses: 0
    Dernier message: 01/06/2011, 15h09
  3. Réponses: 2
    Dernier message: 09/02/2009, 16h05
  4. Réponses: 2
    Dernier message: 25/01/2007, 16h49
  5. Problème de performance sur une "grosse" BD
    Par frechy dans le forum Installation
    Réponses: 9
    Dernier message: 19/09/2005, 16h52

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