Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
Pages: 1
Bonjour,
J'avais d'écrit mon problème a la suite d'un post précédent mais mon problème deviens spécifique.
J'ai donc un souci de perf avec une application sur un serveur dédié.
Après analyse de mon code, j'ai des chose que je peut optimisé c'est certain. mais ce ne serra pas suffisant car j'ai clairement un souci de configuration coté serveur, et c'est la ou mon souci est spécifique :
j'y est déployé le zendskeletonApplication de base, sans rien changer.
ZendDevelopperTools m'indique qu'il lui faut 350ms pour générer la page !
Si je rajoute 5 a 6 module très courant, les classique DoctrineModule, DoctrineORMModule, ZendCommon, ZfCUser, ZfCrbac...ect, je passe carrément a entre 450ms et 700ms, juste en chargeant les module!
J'ai fait un petit benchmark d'un petit code très simple : il calcule 100 000 X $a = 1+2; . sur une moyen de 1000 test, le serveur est même plus rapide que mon ordi local!
De plus, J'ai d'autre site dessus dont un qui fait entre 3500 et 7000visites/jour, qui tourne a merveille sans aucun accro et sans le zf2 - la page la plus lourde est généré en 300ms alors qu'elle effectue une requête sur une 15aine de table et parcoure dans les 50 000 entrées...la home ce génère en une 100aine de ms.
Donc pour moi c'est quelque chose de zf2 que mon serveur ne veut pas digéré .
Ou du moins une fonctionnalité php utilisé souvant par zf2 qui merdouille, peut être.
Ma question est donc: comment faire pour traqué le problème? je ne sais pas du tout ou cherché, mais alors pas du tout. Faut il que je décortique le code complètement ? je ne veut pas installer xDebug car il est très gourmand...a moins qu'on puisse l'activé que sur une application - mais je ne sait pas comment bien l'exploiter sur un serveur distant.
Bref! vous, comment procèderiez vous?
Config du serveur:
1.9mghz dual core
2go de ram
Lamp sous debian, php5.4, apache2, mysql.
Ce n'est pas moi qui est fait l'installe donc je ne sait peut être pas tout...
Je suis preneur de la moindre petite piste ^^
Et les temps d'execution donné par le zendDevelopperTools :
1. route321.72 ms File: Mvc/Application.php - Line: 296 Target: Zend\Mvc\Application 2. dispatch2.61 ms File: Mvc/Application.php - Line: 313 Target: Zend\Mvc\Application 3. dispatch5.76 ms File: Controller/AbstractController.php - Line: 117 Target: Application\Controller\IndexController 4. render4.29 ms File: Mvc/Application.php - Line: 352 Target: Zend\Mvc\Application 5. renderer785.11 µs File: View/View.php - Line: 175 Target: Zend\View\View 6. renderer.post772.00 µs File: View/View.php - Line: 185 Target: Zend\View\View 7. renderer898.84 µs File: View/View.php - Line: 175 Target: Zend\View\View 8. renderer.post774.15 µs File: View/View.php - Line: 185 Target: Zend\View\View 9. response46.61 ms File: View/View.php - Line: 216 Target: Zend\View\View 10. finish854.02 µs File: Mvc/Application.php - Line: 353 Target: Zend\Mvc\Application
Hors ligne
J'ai pas vraiment d'idée, mais est-ce que ça pourrait venir des accès disques ?
A priori le routing va aller chercher dans plusieurs dossiers différents, ouvrir les fichiers et les garder en mémoire. On sait qu'il n'y a pas de problème de calcul (donc proc+ram). Je n'ai jamais tenté ça, mais pourquoi ne pas essayer un seul gros fichier de conf, optimiser les routes, et voir si ça accelère un peu...
Hors ligne
Oulala désolé je me suis complètement planté de forum!
Si un modo pouvait me modéré, je sais pas comment je mi suis pris ^^
Ouai j'avais pensé a quelque chose comme sa car ajouter des modules ralanti.
Ok je, je vais tenté sa puis tenter le module EdpSuperLuminal qui rassemble toute l'ap en un seul gros fichier, j'essaye de faire sa dans la journée.
Hors ligne
J'avais pas fait gaffe à la catégorie dans laquelle tu as posté Je viens de déplacer !
Hors ligne
ok merci
Bon alors je pense qu'on est sur la bonne piste.
Pas eu le courage de créer un seul fichier de config, je me suis dit que sa reviendrai au même avec le cache (non?)
'config_cache_enabled' => true,
'module_map_cache_enabled' => true
...ect
pas de changement notable,
en revanche, avec EdpSuperLuminal, c'est un gain de 150 ms ou presque, bien que se ne sois pas encore très satisfaisant (sa fait toujours 300ms avec tout les module).
j'ai donc tenter différent benchmark que j'ai conparer a ma machine local:
100 000 x $a = 1+4
local : 30ms - serveur : 21ms
100 000 x $a = 5 / 4
local : 29ms - serveur 37ms
100 000 x if(1 > 4)
local : 20ms - serveur 25ms
1000 x require('req') , ou rec est un fichier texte vide.
local : 2ms ...serveur : 77 ms !!!!
( ces résultat sont des moyen faite sur une 100aine de test)
Alors que ma machine local est plus rapide de 0.2 a 0.5 X pour la plus-pars des type d'opération, la fonction require est plus de 30x plus long sur mon serveur. bien que le serveur sois même plus rapide pour les additions ^^
what do you think?
Quel autre type de test pourrai-je faire pour confirmé la chose?
Je cherche déjà une explication pour la lenteur de ce require !
EDIT / PS : le sujet n'est toujours pas dans le bon forum, j'ai oublié de préciser mals c'est sur zf2 et non zf1 ^^
Dernière modification par Splyf (27-10-2014 12:35:12)
Hors ligne
Bon, j'avance...un peut.
J'ai fini par installer xhprof sur le serveur, avec XH GUI.
L'avez vous déjà utilisé?
Dans le camembère ou il affiche les fonction les plus gourmande, j'ai une tranche qu'il nome "Loading".
Elle prend dans les 200ms sans module, et jusqu'a 450ms avec des module a charger. Mais je n'est trouver aucune documentation sur ce a quoi cela correspond...elle n’apparaît pas dans le tableau de fonction en dessous.
Sur les autre site, le "Loading" dans le camambère est présent, mais ne prend que 50ms. kécecé?
Hors ligne
OK je sais a quoi correspond ce "Loading", en faite c'est le regroupement de tout les appelle commençant par Load:: ...
j'ai l 'impression que cela correspond a la directive "use", car dans le tableau des fonction, j'en trouve 550 du type
load::{nom-dune-classe}
comme par exemple load::Query/Parser.php.
En local, l'ensemble de ces appel prenne a pêne 10ms :s
Pourtant, utiliser le module EdSuperLuminal n'a pas changer grand chose :s
plz help *.*
Dernière modification par Splyf (29-10-2014 16:50:25)
Hors ligne
Plop là pour le coup la piste du disque qui est lent semble se confirmer.
Hors ligne
J'ai fait un test hdparm :
serveur :
Timing cached reads: 1548 MB in 2.00 seconds = 773.56 MB/sec
Timing buffered disk reads: 348 MB in 3.01 seconds = 115.54 MB/sec
local :
Timing cached reads: 3044 MB in 2.00 seconds = 1521.92 MB/sec
Timing buffered disk reads: 266 MB in 3.01 seconds = 88.35 MB/sec
(test exécuté 2 ou 3 foi) comme conseillé. Je ne sais pas du tout comment interprété ces résultat, le cache est plus lent, l'autre plus rapide?
Quel autre test puis -je faire ?
Comment savoir si c'est matériel ou logiciel? C'est un serveur dédié chez OVH.
Hors ligne
Bon alors la je commence a vraiment me demandez si sa valait le coup de passé autant de temps a me formé sur ce framework.
J'ai tenter de déployé le skelettonApplication sur le dédié perso d'un collègue. C'est la même configuration, la même offre prise chez OVH.
Et j'ai les même résulat. Enfin, sur ce serveur php est seulement a la version 5.3 et j'ai du retourné a zf2.2.x...mais en local je n'est pas d'écart de perf entre les deux version.
3 possiblité:
- l'offre de base des serveur d'OVH est vraiment nul
- il y a le même problème de config sur les deux serveur
- il faut une machine puissante pour obtenir des performance satisfaisante avec ZF2.
Je sais qu'un framework php est toujours un peut lourd, et zf2 n'a pas très bonne réputation sur ce points... néanmoins, je croyait qu'il était fait pour tourné sur n'importe quel machine...
400ms pour l'app de base, et 600 a 750ms avec des module de base, c'est pour moi tout simplement inutilisable. Je veut bien que mon application qui tourne entre 1.5s et 2s sur ce serveur est grand besoins d’optimisation, mais je ne pense pas arrivez en dessous des 400ms du zendSkeletton. pour moi une page simple qui met 200ms c'est déjà lourd.
Et si il me faut un proc de 3ghz et 6go de ram pour avant des performance satisfaisante avec un site qui fait 15000 visites / jours, le temps et la maintenabilité gagné en développement n'en vaut pas la chandelle.
Si vous pouviez me rassurer sur ce points...
Hors ligne
Non tu n'as pas besoin d'avoir un serveur sur-puissant. Perso j'ai un site qui tourne sur un hébergement mutualisé qui met entre 500 ms et 1s pour afficher une page sachant que le site est pas tip top niveau opti, qu'on est sur un dédié et que j'ai pas mal d'appels en bdd.
J'en avais un autre qui tournais sur un serveur avec 1ghz et 2go de ram et ça passait tranquille, j'étais à environ 200ms pour afficher les pages. Donc il doit y avoir un problème quelque part sur leurs serveurs.
As-tu essayé d'activer APC ?
Hors ligne
bin 500 et 1s c'est beaucoup nan? Sur un dédié ou un mutu j'ai pas compris? ^^
Moi c'est sa qui m'étonne j'ai de bonne perf sur des mutualisé, mais en même temps les mutu partage les ressources de gros serveur avec d'autre, temps que y'a de la puissance a fournir.
Il s'uffit d'activer Apc pour que sa marche? Rien besoin de faire niveau configuration dans zf? (les doc que je trouve parle de mettre en cache des objet dans notre propre code mais pas pour le reste :s ) Je fait un truck et j'essaye de l'installer direct après.
Pour un petit site sa me dérange pas trop qu'il sois un peut lent, mais je me fait vraiment beaucoup de souci pour la refonte entière d'un projet qui doit tourné sur ce serveur et qui va devoir afficher beaucoup de page à chaque minute
Hors ligne
En gros sur le mutualisé je suis entre 500ms et 1 seconde et sur le dédié 200 ms.
Non apc c'est un cache d'opcode, ça s'active avec php il y a juste un paramètre à configurer mais c'est dans le fichier .ini.
Après tu peux stocker aussi des choses dedans mais dans ton cas c'est plus mettre le framework en cache qui est intéressant.
Hors ligne
Je suis loin d'être expert en caches, mais pourquoi ne pas utiliser Zend Opcache (intégré à PHP 5.5) au lieu d'installer APC en plus ?
https://www.digitalocean.com/community/ … nd-php-fpm
Hors ligne
Ca doit fonctionner aussi sauf que j'ai cru voir qu'il était en php 5.3 .
Hors ligne
Ah oui, en fait non... Premier post : PHP 5.4
Ben voilà, faut mettre à jour et utiliser l'opcache de 5.5 alors !
http://php.net/supported-versions.php
Hors ligne
Voua! ok Apc c'est mieux ! je suis passé a 150ms, et mon App a gagné 500 / 700 ms
Oh joie
Pfffouu c'est rassurant. jamais eu besoin d'utilisé un cache avant d’utiliser un framework php, du coup à par vaguement de nom je n'en connaissait pas vraiment l’existence. Ce qui est étonnant c'est que je ne constate pas de différence notable sur les autre sites hébergé. Comment sa se fait?
En tout cas, sa devrai être précisé dans la doc de zf dès la page d’installation !!
l'opCache du 5.5 est plus efficace? on peut l’additionné a Apc?
Hors ligne
Ca sert à rien d'avoir 2 caches d'opcode c'est soit opcache soit apc mais les 2 ensemble je suis pas sûr que ça soit très bon.
Tu n'es pas obligé d'en utiliser un avec un framework ça fonctionne très bien sans .
Hors ligne
D'après Engineyard, Zend OpCache est plus puissant qu'APC, mais ne fait "que" opcache.
Par ailleurs, je ne sais pas si tu as la possibilité de mettre à jour ton PHP, mais honnêtement des optimisations sont faites entre chaque versions, donc passe en 5.6... Si tu ne peux pas mettre à jour mais que tu as un controle total sur le serveur, jette un oeil sur Docker.
Hors ligne
Bon ba allez op on fait passé tout sa a 5.6 lundi.
Orkin a écrit:
Tu n'es pas obligé d'en utiliser un avec un framework ça fonctionne très bien sans .
Donc pour toi les perf du zend que j'ai sur ce serveur ne sont tout de même pas normal, avec ou sans cache?
Perdu beauuucoup trop de temps la dessus, avec le cache et un poile d'opti sa va le faire bien que se ne sois pas très satisfaisant... de toute façons en janvier on va chopé une serveur dualcore 2ghz avec 16go de ram, et ce pour le même prix / mois que le précédent xD. Au moins on repartira sur une installe propre.
On élucide pas le problème en prenant un truck plus puissant mais pour le même prix sa serrai idiot de ce priver ^^
donc d'ici la on va dire que sa va le faire.
Mais Je n'aime pas me dire qu'il y a peut être quelque chose qui cloche encore et que je ne le saurai jamais >.<
Hors ligne
Tu peux essayer de faire tourner le site sur un VPS pour voir, t'en prends un petit juste pour un mois, install de LAMP propre et tout... Je te conseille de te tourner vers Digital Ocean pour faire le test, je te mets un lien de referal juste en dessous pour que tu ai 10$ pour faire ton test (et moi 25$ dollars apparemment).
S'inscrire sur Digital Ocean avec 10$ de crédits
Hors ligne
Cool merci !
Mais je vais devoir reporter sa a plus tard car je suis a la boure maintenant pour plein de truck.
Je ne met pas encore résolut au cas ou je trouve le temps de me replongé sur le problème et vous dire ce qui cloche!
c'est toujours bien de connaitre la source d'un souci, même si on a des solutions qui se présente sans
Hors ligne
Pages: 1