Windows 7 php + Symfony2 terriblement lent
C'est un problème que j'ai eu pendant un long moment. Je veux exécuter des applications PHP sur mon ordinateur windows et il a terriblement élevé du temps de chargement, autour de 10 à 25 secondes. J'ai essayé beaucoup de choses:
- J'ai d'abord essayé une simple installation de XAMPP
- J'ai lu WAMP peut-être plus rapide, donc j'ai essayé de WAMP, trop. Il m'a donné les mêmes résultats
- Puis j'ai installé un serveur nginx avec PHP, mais ça n'a pas aidé non plus
- Enfin, j'ai installé une Ubuntu 11.10 dans VirtualBox et j'ai partagé mon windows fichiers contenant mon projet, mais le résultat était encore pire: plus de 22 deuxième temps de chargement à chaque fois.
Mise à JOUR: j'ai même essayé de l'APC - il amélioré un peu, mais encore de 6 à 8 sec/page
Je l'ai transféré mes fichiers sur un serveur linux(hébergement mutualisé), sur lequel il s'exécute en environ 300-500 ms. Sur l'installation de XAMPP, j'ai essayé d'exécuter d'autres (c'est à dire pas de Symfony2) applications(phpmyadmin par exemple), qui étaient aussi plus lent que sur l'hébergement mutualisé, mais pas extrêmement lent, avec 2-3 sec temps de chargement. Jusqu'à ce que je change de Linux comme OS principal, comment pourrais-je améliorer les performances? J'ai un ordinateur portable avec un i7, 4 GO de RAM, HDD 5400RPM, Win7 x64.
Merci pour votre aide!
UPDATE2: Pour quelque mystérieuse raison, ma Symfony routage ne fonctionne pas avec fcgid (il m'a donné une erreur 404 pour tout) je suis donc de retour pour l'utilisation de PHP en tant que module. Maintenant, il est devenu le pire (le pire qu'elle ne l'habitude d'être en tant que module): le mode app 20-25 sec, et le dev mode, plus de 30s à chaque fois, donc, je reçois une erreur de dépassement de délai, et c'est la même avec ou sans l'APC activé.
Ici vous pouvez voir cette erreur. C'est la traçabilité: chaque fois qu'il atteint un autre point de l'exécution au sein de 30s:
- Si APC vous a donné aucune amélioration, j'avais soupçonner qu'il était mal configuré. Je ne pense pas que le fait d'avoir un accélérateur PHP ne ferait aucune différence avec n'importe quelle application, même si le processus PHP est resté dans la mémoire via FastCGI. Ne APC offre une application web pour avoir un aperçu du cache d'opcode? Nous avons eu ce pour eAccelerator, qui je pense aurait été utile si les pages n'étaient pas de mise en cache.
- Maintenant, je vais réessayer avec les APC, et dire vous les résultats.
- Résultats: il est mieux maintenant, mais encore de 6 à 8 sec/page. Une idée?
- Qu'avez-vous changé? Si APC offert une amélioration, alors vous pouvez choisir de modifier votre message afin de refléter le fait que, et de les enregistrer sur la confusion
:)
- J'ai fourni deux autres idées sur ma réponse ci-dessous.
- J'ai activé l'extension apc, et a changé de symfony2 autoload selon ceci: symfony.com/doc/current/book/performance.html
- Mesurez-vous Symfony2 performance en dev mode ou en mode prod? Ce n'profiler dire?
- - Je voir le temps de chargement de dev mode, mais il n'est pas plus rapide en prod mode.
- Hmm... capture d'écran du générateur de profils (en particulier les synchronisations de données) et de le coller dans votre question.
- J'ai mis à jour la question, s'il vous plaît avoir un coup d'oeil. Maintenant c'est encore pire.
- Hmm. Cette démarche est-elle vide? - pour vérifier la performance brute, vous devriez juste être en train de servir un hello world chaîne. Personnellement, je préfère persister avec fcgid. Il a travaillé pour moi assez facilement, mais il a été quelques années depuis que j'ai mis que sur Windows.
- (Aparté: si vous êtes coincé, puis les saisir vous-même une copie de VirtualBox, l'installer sur votre machine Windows, et installer un serveur LAMP à l'intérieur. Va vous et en cours d'exécution assez rapidement)
- Comme je l'ai écrit ci-dessus ubuntu dans virtualbox n'était pas mieux. J'ai fait un test de référence(source: frankdavid.hu/files/benchmark.php.txt), il s'exécute dans 600-800ms alors que sur le serveur linux, il s'exécute en moins de 1ms!
- Je suis à court de choses à suggérer, mais ~600ms n'est pas trop mal pour ce que je suppose est une machine de dev. Il est tout à fait possible de dev sous Windows et de les déployer sur Linux (sûrement "ubuntu dans virtualbox n'était pas mieux" ne peut pas être le cas, si vous avez de la 600ms au lieu de 30!).
- Non, vous devez vous m'avez mal compris. 600 ms est le moteur d'exécution du script de test sur windows alors que sur l'hébergement linux(machine distante) son sous 1ms. Je n'ai pas de relancer le test sur ma virtualbox ubuntu. Ubuntu va mon projet symfony2 dans 20-25 sec.
- Avez-vous installé et pas en cours d'exécution Adobe ColdFusion sur la même machine?
- eh bien, je viens de répéter ce que vous avez dit: "Comme je l'ai écrit ci-dessus ubuntu dans virtualbox n'était pas mieux. J'ai fait un test de référence... il tourne dans les 600-800ms alors que sur le serveur linux, il s'exécute en moins de 1ms". Cependant, je suis maintenant correctement les confondre: "Ubuntu va mon projet symfony2 dans 20-25 sec". Je pensais que c'était Windows qui était très lent?
- Permettez-moi de répéter ma suggestion précédente: "capture d'écran du générateur de profils (en particulier les synchronisations de données) et de le coller dans votre question" (de la machine, avec 20-25sec timings).
- Maintenant, il se charge en 10-15s à nouveau, mais je ne vois tout moment les données du profileur, bien que j'ai vérifié toutes les pages plusieurs fois. Je ne vois que ces lignes dans le journal:
Notified event "kernel.request" to listener "Symfony\Component\HttpKernel\EventListener\ProfilerListener::onKernelRequest".
Notified event "kernel.request" to listener "Symfony\Bundle\FrameworkBundle\EventListener\RouterListener::onEarlyKernelRequest".
- Avez-vous trouvé la solution? J'ai un problème. PHP fonctionne bien dans mon Ubuntu, mais assez lent sur Windows.
- Non, je n'ai pas. Même php5.4 c'est tellement lent sur mon ordinateur portable.
- coller votre capture d'écran de votre synchronisation profil d'un lien dans les commentaires, sinon il n'y a rien beaucoup de frais à avancer. Si vous avez confiance en vous débogueur, essayez d'isoler la partie de Symfony2 qui est à l'origine du ralentissement. Juste deviner peut être un fichier appel système qui n'est pas mis en cache sur Windows?
- J'en ai eu marre avec l'ensemble de la chose et a retiré le serveur à partir de mon ordinateur. Peut-être que plus tard je vais le réinstaller, puis je vais envoyer des captures d'écran. Tout ce que je peux vous dire est que tout est lent. J'ai essayé avec différents projets, différentes sf versions(2.0, 2.1), les différentes versions de php(5.3.* TS, NTS, 5.4), il était lent dans la console(exécution de la sf commandes) et dans le navigateur web. Il me semble donc être un problème commun. Edit: je viens de remarqué que votre message n'était pas adressé à moi, quoi que...
- J'ai le même problème: projet symfony2 temps de charge est de 8 à 15 secondes sur wamp windows et moins de 500ms sur mon serveur distant sous ubuntu (très basique, 2€/mois de la solution). J'ai essayé plusieurs config php changements pour aucun résultat...
Vous devez vous connecter pour publier un commentaire.
J'ai eu un problème similaire avec symfony 1 pour un temps sur XP et Server 2003. La solution a été d'installer un accélérateur PHP (eAccelerator pour nous, APC peut-être un meilleur pari de ces jours) plus FastCGI/fcgid.
Addendum: depuis des lustres, depuis que j'ai utilisé Apache sur Windows. J'ai été généralement d'avis que sa performance a été une hausse progressive de mieux, plutôt que pour le pire; cependant, comme avec la plupart inhabituelle set-ups, YMMV. Comme pour mon commentaire précédent, je vous recommande de poser votre question à Apache Salon, où j'ai, auparavant, ont reçu des avis d'experts.
Si ma mémoire est correctement, ils peuvent vous offrir un libre Apache binaire compilé avec de meilleurs outils que le standard offerts sur le site web d'Apache.
Mise à jour:
Depuis PHP 5.5 a maintenant intégré le OPCache PHP, ce qui accélère le temps d'exécution. Dans ma configuration d'une demande complète, avec accès de base de données prend 180ms maintenant.
Suit:
php.ini paramètres:
Pourquoi Windows plus lent que Unix?
Comme discuté ici, PHP est très lent dans file_exists, et filemtime() sur Windows. depuis Symfony2 est à l'aide de ces fonctions en dev mode de beaucoup. nous n'entrerons pas en vertu de 700ms (dans <= 5.4) sur Windows. PHP 5.5 permet de 180ms.
Une solution pourrait être WinCache qui a été développé par microsoft pour résoudre ce problème sur IIS. Mais comme il ne fonctionne que sur plusieurs versions de Windows et aussi seulement avec IIS c'est pas une solution pour moi.
Alternative
Également une solution sympa je recommande est d'avoir une Machine Virtuelle Linux sur Virtualbox. C'est facile à installer et est également plus comme l'environnement de production.
J'ai exactement le même problème. Réglage de la suite dans php.ini l'augmentation de la performance pour moi à partir de ~800ms à ~300 ms:
php.ini:
Pas encore l' ~100ms-je obtenir à partir d'une machine unix, mais il fait une différence au moins
Wow, Après avoir essayé beaucoup de choses différentes, j'ai enfin réussi à passer d'un 15s temps d'exécution d'un 3s exec temps sur windows7 avec wamp.
Comment installer wincache extension :
http://us2.php.net/manual/en/wincache.installation.php
Où télécharger le wincache dll:
http://sourceforge.net/projects/wincache/
Mon php.ini config changement:
je pense que vous avez un problème avec le mécanisme de mise en cache.
consultez app\répertoire de cache.
il y a un dossier nommé dev.
si elle n'existe pas ou s'il est vide, vérifiez les autorisations de dossier.
quand je supprime dev et de prod sous-répertoires app\répertoire de cache, il faut environ 18 secondes pour charger la page, mais après cela, il ne prend que 500 ms.
Il y a quelques années j'ai eu le même problème. Qui logiciel antivirus ne vous exécuter en arrière-plan?
Essayez de le désactiver pour dev fins ou de les modifier. Il pourrait également être certains d'indexation services en cours d'exécution en arrière-plan. Symfony 2 est composée de >15000 fichiers avec les fournisseurs 🙂
Aussi essayer de le faire de la façon classique par la réinstallation de Windows à partir du zéro.
Mes sites prend habituellement de 100 à 500 ms et mon ordinateur est plus lent que le vôtre. (Intel C2D P8600)
Juste une supposition (et probablement pas le droit), mais il pourrait être MySQL liés. De voir comment vous l'avez mentionné, PhpMyAdmin et Symfony 2 applications PHP vous l'avez testé, les deux reposent sur MySQL (en supposant que vous avez MySQL mis en place dans Symfony 2). Vous n'avez pas le mentionner dans votre post, mais dans votre VirtualBox installation, avez-vous, par hasard, laisser le script en cours d'exécution sur Ubuntu se connecter au serveur MySQL sur votre Windows de la machine hôte?
Vous pouvez vérifier PHP de Référence pour certains tests de performance des scripts, et de voir si ces scripts fonctionnent mieux timewise.
Une autre chose que vous pourriez faire est d'essayer d'utiliser Xdebug et voir si vous trouvez (un) certain (groupe de) fonction(s) qui prennent trop de temps.
Je suis certainement va garder cette question en tant que favori, parce que je suis trop curieux de voir ce qu'il était maintenant 🙂 bonne chance !
Vérifiez votre ordinateur, la mémoire vive, la RAM en utilisant http://oca.microsoft.com/en/windiag.asp ou d'exécuter le test de la mémoire d'applications livrées avec votre CD d'Ubuntu démarrage de l'option.
Dans les deux cas, choisir ce que sais supplémentaire ou de test de profondeur - je ne me souviens pas exactement Comment jamais, de choisir le test avec plus de longue date de ce genre de tests n'a pas de fin, vous attendez un peu que le test de finir deux phases et tous les problèmes avec votre RAM, le plus souvent, illustré.
Aussi, Vérifiez votre disque dur avec tous les moyens de vérifier. après cela, essayez d'effectuer la défragmentation de disque
Je peu, votre problème est matériel connexe problème.
Mes pages ont été 20 secondes à s'exécuter. J'ai installé fast cgi, augmenté les limites de la mémoire, de tout, pas de travail. Ensuite commencé à regarder au montage et remarqué symfony pare-feu module de prendre plus de temps. S'avère avoir "localhost" dans ma config pour la doctrine est ce qui a été à l'origine de problèmes. Changer l'adresse 127.0.0.1 résolu le problème. Je ne sais pas pourquoi, mais c'est décrite ici:
http://12wiki.blogspot.ca/2012/11/why-does-symfony-2-firewall-take-so.html
Page temps de chargement dépend de la CSS + JS + chargement de l'Image en temps aussi. J'ai eu le même problème dans CakePHP et résolu le problème en utilisant
mod_expires
dans le htaccess.Avez-vous essayé "ExpiresByType" dans votre serveur de fichier htaccess pour le CSS, JS et les images? Vérifier cette page.