web-dev-qa-db-fra.com

Windows 7 php + Symfony2 terriblement lent

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

  • J'ai d'abord essayé une installation XAMPP simple
  • J'ai lu que WAMP était peut-être plus rapide, alors j'ai aussi essayé WAMP. Cela m'a donné les mêmes résultats
  • Ensuite, j'ai installé un serveur nginx avec PHP, mais cela n'a pas aidé non plus
  • Enfin, j'ai installé un 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.

[~ # ~] mise à jour [~ # ~] : j'ai même essayé APC - il 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 s'exécute en environ 300-500 ms. Sur l'installation XAMPP, j'ai essayé d'exécuter également d'autres applications (c'est-à-dire pas Symfony2) (par exemple, phpmyadmin), qui étaient également 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 processeur i7, 4 Go de RAM, disque dur 5400 tr/min, Win7 x64.

Merci de votre aide!

UPDATE2: Pour une raison mystérieuse, mon routage Symfony ne fonctionnait pas avec fcgid (cela m'a donné une erreur 404 pour tout) alors je suis retourné pour utiliser = PHP en tant que module. Maintenant, il est devenu le pire jamais (pire qu'il ne l'était auparavant en tant que module): mode application 20-25 secondes, et en mode dev, plus de 30 secondes à 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. Ceci est reproductible: chaque fois qu'il atteint un point d'exécution différent dans les 30 secondes:

enter image description here

35
David Frank

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 de nos jours) plus FastCGI/fcgid.

Addendum: ça fait longtemps que je n'ai pas utilisé Apache sur Windows. Je suis généralement d'avis que ses performances s'améliorent de façon constante plutôt que pires; cependant, comme pour la plupart des configurations inhabituelles, YMMV. Selon mon commentaire précédent, je recommande de poser votre question à Apache Lounge , où j'ai déjà reçu d'excellents conseils d'experts.

Si la mémoire est correcte, ils peuvent vous offrir un binaire Apache gratuit compilé avec de meilleurs outils que celui standard proposé sur le site Web d'Apache.

8
halfer

Mise à jour:

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

Étapes:

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

Paramètres php.ini :

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 discuté ici , PHP est très lent dans file_exists et filemtime () sur Windows. Puisque Symfony2 utilise beaucoup ces fonctions en mode dev. Nous ne le ferons pas obtenir moins de 700 ms (en <= 5.4) sous Windows. PHP 5.5 autorise maintenant 180 ms.

Une solution pourrait être WinCache qui a été développée par Microsoft pour résoudre ce problème sur IIS. Mais comme cela ne fonctionne que sur plusieurs versions de Windows et uniquement avec IIS ce n'est pas une solution pour moi.

Alternative

Une autre bonne solution que je peux recommander est d'avoir une machine virtuelle Linux sur Virtualbox. Il est facile à configurer et ressemble davantage à l'environnement de production.

25
Simon Fakir

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

php.ini:

realpath_cache_size = 2M

Toujours pas les ~ 100 ms que j'obtiens d'une machine Unix, mais cela fait au moins une différence

20
Bert Hekman

Wow, Après avoir essayé beaucoup de choses différentes, j'ai finalement réussi à passer d'un temps d'exécution de 15s à un temps d'exécution de 3s sur windows7 avec wamp.

Comment installer l'extension wincache: http://us2.php.net/manual/en/wincache.installation.php

Où télécharger la DLL wincache: http://sourceforge.net/projects/wincache/

Ma modification de configuration php.ini:

[PHP]
realpath_cache_size = 2M
extension=php_wincache.dll
; XDEBUG Extension
;zend_extension = "C:/Net Generation/wamp/bin/php/php5.5.12/zend_ext/php_xdebug-2.2.5-5.5-vc11.dll"
;
[xdebug]
xdebug.remote_enable = off
xdebug.profiler_enable = Off
xdebug.profiler_enable_trigger = off
xdebug.profiler_output_name = cachegrind.out.%t.%p
xdebug.profiler_output_dir = "C:/Net Generation/wamp/tmp"
xdebug.show_local_vars=0
xdebug.max_nesting_level=200

[opcache]
zend_extension = "C:/Net Generation/wamp/bin/php/php5.5.12/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
3
Sébastien

Il y a quelques années, j'ai eu le même problème. Quel logiciel antivirus exécutez-vous en arrière-plan? Essayez de le désactiver à des fins de développement ou de le modifier. Il peut également s'agir de services d'indexation exécutés en arrière-plan. Symfony 2 se compose de> 15 000 fichiers avec des fournisseurs :) Essayez également de le faire de manière classique en réinstallant Windows à partir de zéro. Mes sites prennent généralement de 100 à 500 ms et mon ordinateur portable est plus lent que le vôtre. (Intel C2D P8600)

1
Vincent

Juste une supposition (et probablement pas la bonne), mais cela pourrait être lié à MySQL. Voyant comment vous avez mentionné PhpMyAdmin et Symfony 2 comme PHP que vous avez testées, elles s'appuient toutes les deux sur MySQL (en supposant que vous avez configuré MySQL dans Symfony 2). Vous ne l'avez pas mentionné dans votre message, mais dans votre configuration VirtualBox, avez-vous par hasard laissé le script exécuté sur Ubuntu se connecter au serveur MySQL sur votre machine hôte Windows?

Vous pouvez consulter PHP Benchmark pour certains scripts de test de performances et voir si ces scripts fonctionnent mieux dans le temps.

Une autre chose que vous pourriez essayer est d'utiliser Xdebug et de voir si vous trouvez (a) certaines (groupe (s)) de fonctions qui prennent trop de temps.

Je vais définitivement garder cette question en favori, car je suis trop curieux de voir ce que c'était maintenant :) bonne chance!

1
Wouter

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

1
Ekrem

Mes pages prenaient 20 secondes pour s'exécuter. J'ai installé cgi rapide, augmenté les limites de mémoire, tout, ne fonctionne pas. Puis a commencé à regarder la chronologie et a remarqué que le module de pare-feu symfony prenait la plupart du temps. Il s'avère que "localhost" dans ma configuration pour doctrine est la cause du problème. Le changer en 127.0.0.1 a résolu le problème. Je ne sais pas pourquoi, mais il est décrit ici:

http://12wiki.blogspot.ca/2012/11/why-does-symfony-2-firewall-take-so.html

0
Alex

Vérifiez la mémoire à accès aléatoire de votre ordinateur, RAM using http://oca.Microsoft.com/en/windiag.asp ou exécutez l'application de test de mémoire fournie avec votre Ubuntu Option de démarrage du CD.

Dans les deux cas, choisissez ce que vous appelez un test supplémentaire ou approfondi - Je ne me souviens pas exactement - Cependant, choisissez le test avec plus de temps, ce type de test n'a pas de fin, vous attendez simplement que le test termine deux phases et tout problème avec votre RAM, communément, montré.

Vérifiez également votre disque dur avec tout moyen de vérification. après cela, essayez d'effectuer une défragmentation du disque

I bit, votre problème est un problème lié au matériel.

0
user1350140