36 votes

Windows 7 php + Symfony2 terriblement lent

C'est un problème que j'ai depuis longtemps. Je veux exécuter des applications PHP sur mon ordinateur Windows et le temps de chargement est terriblement élevé, environ 10 à 25 secondes. J'ai essayé plusieurs choses :

  • J'ai d'abord essayé une installation simple de XAMPP
  • J'ai lu que WAMP pourrait être plus rapide, alors j'ai aussi essayé WAMP. J'ai obtenu les mêmes résultats
  • J'ai ensuite installé un serveur nginx avec PHP, mais cela n'a rien donné non plus.
  • Finalement, j'ai installé une Ubuntu 11.10 dans VirtualBox et j'ai partagé mes fichiers Windows contenant mon projet, mais le résultat était encore pire : plus de 22 secondes de chargement à chaque fois.

UPDATE : J'ai même essayé APC - cela s'est un peu amélioré mais toujours 6-8 sec/page

J'ai téléchargé mes fichiers sur un serveur linux (hébergement partagé), sur lequel il fonctionne en 300-500 ms environ. Sur l'installation XAMPP, j'ai essayé d'exécuter d'autres applications (c'est-à-dire pas Symfony2) (par exemple phpmyadmin), qui étaient aussi plus lentes que sur l'hébergement partagé, mais pas extrêmement lentes, avec un temps de chargement de 2-3 secondes. Jusqu'à ce que je passe à Linux comme système d'exploitation principal, comment pourrais-je améliorer les performances ? J'ai un ordinateur portable avec un processeur i7, 4 Go de RAM, un disque dur 5400RPM, Win7 x64.

Merci pour votre aide !

UPDATE2 : Pour une raison mystérieuse, mon routage Symfony n'a pas fonctionné avec fcgid (il m'a donné une erreur 404 pour tout) donc je suis revenu à l'utilisation de PHP comme module. Maintenant, c'est devenu le pire de tous les temps (pire qu'avant en tant que module) : en mode app 20-25 sec, et en mode dev, plus de 30s à chaque fois, donc j'obtiens une erreur de timeout, et c'est la même chose avec ou sans APC activé.

Ici vous pouvez voir cette erreur. Elle est reproductible : à chaque fois, elle atteint un point d'exécution différent dans les 30s :

enter image description here

0 votes

Si APC ne vous apporte aucune amélioration, je soupçonne qu'il est mal configuré. Je ne peux pas penser que le fait d'avoir un accélérateur PHP ne ferait aucune différence avec n'importe quelle application, même si les processus PHP restaient en mémoire via FastCGI. Est-ce qu'APC offre une application web pour regarder dans le cache des opcodes ? Nous avions cela pour eAccelerator, ce qui aurait été utile si les pages n'étaient pas mises en cache.

0 votes

Maintenant je vais réessayer avec APC, et vous dire les résultats.

0 votes

Résultats : c'est mieux maintenant, mais toujours 6-8 sec/page. Une idée ?

27voto

Simon Fakir Points 83

Mise à jour :

Depuis que PHP 5.5 a intégré le PHP OPCache, cela accélère le temps d'exécution. Dans ma configuration, une requête complète avec accès à la base de données prend maintenant 180 ms.

Des pas :

  1. Mise à jour de la dernière version de php
  2. Activer OPCache
  3. Désactiver xdebug
  4. Définir realpath_cache_size = 2M comme DemonTPx l'a mentionné

php.ini paramètres :

realpath_cache_size = 2M
[XDebug]
xdebug.profiler_enable = 0
xdebug.remote_enable = 0
[opcache]
zend_extension = "C:\xampp18\php\ext\php_opcache.dll"
opcache.enable = 1
opcache.enable_cli = 0
opcache.memory_consumption = 128
opcache.interned_strings_buffer = 8
opcache.max_accelerated_files = 4000

Pourquoi Windows est-il plus lent qu'Unix ?

Comme indiqué ici PHP est très lent dans file_exists, et filemtime() sous Windows. Comme Symfony2 utilise beaucoup ces fonctions en mode dev, nous ne pourrons pas descendre en dessous de 700ms (en <= 5.4) sous Windows. PHP 5.5 permet maintenant 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, ce n'est pas une solution pour moi.

Alternative

Une autre solution intéressante que je peux recommander est d'avoir une machine virtuelle Linux sur Virtualbox. Cette solution est facile à configurer et ressemble davantage à un environnement de production.

0 votes

Je suis passé de 10s à 2,5s avec ces paramètres. La désactivation de xDebug a apporté une amélioration notable, de même que le réglage de realpath_cache_size à 2M.

0 votes

Bonjour Jean, tout de même - 2,5 secondes est trop lent pour le développement. Vous pouvez essayer OPCache en PHP5.5 qui devrait le faire plus rapidement.

0 votes

Cela m'a beaucoup aidé ! Le temps de chargement est passé de ~500ms à ~50ms. Merci !

20voto

DemonTPx Points 1277

J'ai exactement le même problème. La configuration de ce qui suit dans le php.ini a augmenté les performances pour moi de ~800ms à ~300ms :

php.ini :

realpath_cache_size = 2M

Ce n'est toujours pas les ~100 ms que j'obtiens sur une machine unix, mais cela fait au moins une différence.

9voto

halfer Points 8455

J'ai eu un problème similaire avec symfony 1 pendant un certain temps sur XP et Server 2003. La solution était d'installer un accélérateur PHP (eAccelerator pour nous, APC pourrait être un meilleur pari ces jours-ci) plus FastCGI/fcgid.

Addendum : cela fait longtemps que je n'ai pas utilisé Apache sous Windows. J'ai généralement été d'avis que ses performances se sont améliorées de façon constante, plutôt que de se dégrader ; cependant, comme pour la plupart des configurations inhabituelles, de bons résultats ne sont pas garantis. Conformément à mon commentaire précédent, je vous recommande de poser votre question à l'adresse suivante Salon Apache où j'ai déjà reçu d'excellents conseils d'experts.

Si ma mémoire est bonne, ils peuvent vous proposer un binaire Apache gratuit compilé avec de meilleurs outils que celui proposé en standard sur le site web d'Apache.

0 votes

J'ai essayé APC mais ça n'a pas aidé, et avec fastCGI c'est devenu encore plus lent.

0 votes

J'ai fait une mise à jour vers fcgid, mais cela n'a pas aidé :( J'ai même obtenu une version NTS de PHP.

0 votes

Avez-vous vérifié que c'était en fait installé ? Vous devriez avoir une barre d'outils Symfony qui vous permet de savoir si cela fonctionne (au moins, Symfony 1 en avait une). Je crois aussi que php ou apache (j'ai oublié lequel) devrait montrer que fcgid est correctement installé si vous listez les modules en ligne de commande.

1voto

Ekrem Points 191

Je pense que vous avez un problème avec le mécanisme de mise en cache. Vérifiez l'application \cache répertoire. il doit y avoir un dossier nommé dev. s'il n'existe pas ou s'il est vide, vérifiez les permissions du dossier. lorsque je supprime les répertoires dev et prod sous app \cache Dans le répertoire, il faut 18 secondes pour charger la page, mais après cela, il ne faut que 500 ms.

0 votes

Ma mise en cache semble fonctionner parfaitement, et comme je l'ai dit, je n'ai pas ce problème uniquement avec les applications Symfony.

1voto

Vincent Points 11

Il y a quelques années, j'ai eu le même problème. Quel logiciel antivirus utilisez-vous en arrière-plan ? Essayez de le désactiver à des fins de développement ou changez-le. Il peut aussi s'agir de services d'indexation fonctionnant en arrière-plan. Symfony 2 est composé de >15000 fichiers avec des vendeurs :) Essayez également de le faire de manière classique en réinstallant Windows depuis le début. Mes sites prennent généralement entre 100 et 500 ms et mon ordinateur portable est plus lent que le vôtre. (Intel C2D P8600)

0 votes

Non, je n'ai pas d'anti-virus.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X