2012-03-24 11 views
34

Das ist ein Problem, das ich seit langem habe. Ich möchte PHP-Anwendungen auf meinem Windows-Computer ausführen und es hat eine schrecklich hohe Ladezeit, etwa 10-25 Sekunden. Ich habe viele Dinge ausprobiert:Windows 7 php + Symfony2 furchtbar langsam

  • Zuerst habe ich eine einfache XAMPP versucht
  • ich WAMP lesen schneller sein könnte, also versuchte ich WAMP auch. Es gab mir die gleichen Ergebnisse
  • Dann installierte ich einen Nginx-Server mit PHP, aber es half auch nicht
  • Schließlich installierte ich ein Ubuntu 11.10 in VirtualBox und ich teilte meine Windows-Dateien mit meinem Projekt, aber das Ergebnis war noch schlimmer: über 22 Sekunden Ladezeit jedes Mal.

UPDATE: Ich habe sogar versucht, APC - es etwas besser geworden, aber immer noch 6-8 sec/Seite

ich meine Dateien auf einem Linux-Server (Shared Hosting) hochgeladen, auf dem es läuft in etwa 300-500 ms. Auf der XAMPP-Installation versuchte ich, andere (d. H. Nicht Symfony2) Anwendungen ebenfalls auszuführen (z. B. phpmyadmin), die ebenfalls langsamer waren als auf dem gemeinsam genutzten Hosting, aber nicht extrem langsam mit einer Ladezeit von 2-3 Sekunden. Wie kann ich die Leistung verbessern, bis ich zu Linux als Hauptbetriebssystem gewechselt habe? Ich habe einen Laptop mit i7 CPU, 4 GB RAM, 5400 RPM HDD, Win7 x64.

Vielen Dank für Ihre Hilfe!

UPDATE2: Aus irgendeinem mysteriösen Grund arbeitete mein Symfony-Routing nicht mit fcgid (es gab mir einen 404-Fehler für alles), also ging ich zurück, um PHP als Modul zu verwenden. Jetzt ist es das schlechteste aller Zeiten (schlimmer als es früher als Modul war): App-Modus 20-25 Sek. Und im Dev-Modus jedes Mal über 30 Sek., So dass ich einen Timeout-Fehler erhalte, und dasselbe gilt für oder ohne APC aktiviert.

können Sie diesen Fehler sehen. Dies ist reproduzierbaren: jedes Mal einen anderen Punkt der Ausführung innerhalb von 30 s erreicht:

enter image description here

+0

Wenn APC Sie keine Verbesserung gab, ich würde vermuten, es war falsch konfiguriert. Ich kann nicht glauben, dass ein PHP Accelerator überhaupt keinen Unterschied zu einer Anwendung macht, selbst wenn PHP Prozesse über FastCGI im Speicher bleiben. Bietet APC eine Web-Anwendung, um in den Opcode-Cache zu schauen? Wir hatten dies für eAccelerator, was ich für nützlich gehalten hätte, wenn Seiten nicht im Cache waren. – halfer

+0

Jetzt werde ich mit APC versuchen und Ihnen die Ergebnisse sagen. –

+0

Ergebnisse: es ist jetzt besser, aber immer noch 6-8 sec/page. Irgendeine Idee? –

Antwort

8

hatte ich ein ähnliches Problem mit symfony 1 eine Zeit lang auf XP und Server 2003. Die Lösung, die einen PHP-Beschleuniger installiert war (eAccelerator für uns, APC könnte heutzutage eine bessere Wette sein) plus FastCGI/fcgid.

Nachtrag: Es ist schon eine Ewigkeit her, seit ich Apache unter Windows benutzt habe. Ich bin allgemein der Ansicht gewesen, dass seine Leistung immer besser und nicht schlechter geworden ist; aber wie bei den meisten ungewöhnlichen Setups, YMMV. Laut meinem früheren Kommentar empfehle ich Ihnen, Ihre Frage unter Apache Lounge zu stellen, wo ich vorher einige gute Expertenratschläge erhalten habe.

Wenn Speicher richtig funktioniert, können sie Ihnen eine kostenlose Apache-Binärdatei anbieten, die mit besseren Tools kompiliert ist als die Standard-Version, die auf der Apache-Website angeboten wird.

+0

Ich habe APC versucht aber nicht geholfen, und mit fastCGI wurde es noch langsamer. –

+0

Ich habe ein Upgrade auf fcgid, aber nicht geholfen :(Ich habe sogar eine NTS-Version von PHP –

+0

Haben Sie überprüft, dass es _actually_ installiert wurde? Sie sollten eine Symfony-Symbolleiste haben, die Sie wissen lassen, ob es funktioniert (zumindest Symfony 1 hatte) Ich glaube auch, dass entweder PHP oder Apache (ich vergesse was) sollte zeigen, dass fcgid korrekt installiert ist, wenn Sie Module in der Befehlszeile auflisten. – halfer

1

Ich denke, Sie haben ein Problem mit Caching-Mechanismus. Überprüfen Sie das Verzeichnis app \ cache. dort muss ein Ordner namens dev sein. Wenn es nicht existiert oder wenn es leer ist, überprüfen Sie die Ordnerberechtigungen. Wenn ich Dev- und Prod-Verzeichnisse unter App \ Cache-Verzeichnis lösche, dauert es 18 Sekunden, um die Seite zu laden, aber danach dauert es nur noch 500 ms.

+0

Mein Caching scheint perfekt zu funktionieren, und wie gesagt, ich habe dieses Problem nicht nur bei Symfony-Apps. –

1

Vor einigen Jahren hatte ich das gleiche Problem. Welche Antiviren-Software führen Sie im Hintergrund aus? Versuchen Sie, es für Dev-Zwecke zu deaktivieren oder zu ändern. Es könnten auch einige Indizierungsdienste im Hintergrund ausgeführt werden. Symfony 2 besteht aus> 15000 Dateien mit Anbietern :) Versuchen Sie es auch auf die klassische Art und Weise, indem Sie Windows von Grund auf neu installieren. Meine Websites dauert in der Regel von 100-500ms und mein Laptop ist langsamer als deins. (Intel C2D P8600)

+0

Nein, ich habe keinen Antivirus. –

-1

Seite Ladezeit ist abhängig von der CSS + JS + Image Ladezeit auch. Ich hatte das gleiche Problem in CakePHP und löste das Problem, indem ich mod_expires in htaccess verwendete.

Haben Sie versucht "ExpiresByType" in Ihrem Server htaccess-Datei für CSS, JS und Bilder? Überprüfen Sie this Seite.

1

Nur eine Vermutung (und wahrscheinlich nicht die richtige), aber es könnte MySQL verwandt sein. Wenn Sie sehen, wie Sie PhpMyAdmin und Symfony 2 als PHP-Anwendungen, die Sie getestet haben, erwähnt haben, sind beide auf MySQL angewiesen (vorausgesetzt, Sie haben MySQL in Symfony 2 eingerichtet). Du hast das in deinem Post nicht erwähnt, aber hast du in deinem VirtualBox-Setup das Skript, das auf Ubuntu läuft, zufällig mit dem MySQL-Server auf deinem Windows-Host-Rechner verbinden lassen?

Sie könnten PHP Benchmark für einige Leistungstestskripte auschecken, und sehen, ob diese Skripte zeitlich besser funktionieren.

Eine andere Sache, die Sie versuchen könnten, ist Xdebug und sehen Sie, wenn Sie finden (a) bestimmte (Gruppe von) Funktion (en), die zu viel Zeit in Anspruch nehmen.

Ich werde auf jeden Fall diese Frage als Favorit behalten, weil ich zu neugierig bin, um zu sehen, was es jetzt war :) Viel Glück!

+0

omg Wouter, vielen Dank. Ich schlug meinen Kopf gegen die Wand mit einem ähnlichen Problem und du hast absolut recht - meine entfernte MySQL-Verbindung war der Flaschenhals. – Leng

0

Überprüfen Sie Ihren Computer Arbeitsspeicher, RAM mit http://oca.microsoft.com/en/windiag.asp oder führen Sie die Speichertest-Anwendung mit Ihrer Ubuntu CD-Boot-Option ausgeliefert.

In beiden Fällen wählen, was als extra oder tiefer Test wissen - ich erinnere mich nicht genau- Wie auch immer, wählen Sie den Test mit mehr lange Zeit diese Art von Tests hat kein Ende, warten Sie nur bis zum Test zwei Phasen und beenden irgendwelche Probleme mit Ihrem RAM, allgemein gezeigt.

Überprüfen Sie auch Ihre Festplatte mit jeder Überprüfung. danach versuchen, Festplatte Defragmentierung durchzuführen

Ich Bit, Ihr Problem ist Hardware-Problem.

24

Update:

Seit PHP 5.5 jetzt die PHP OPCache integriert hat, beschleunigt dies die Ausführungszeit auf. In meinem Setup dauert eine vollständige Anfrage mit Datenbankzugriff nun 180ms.

Schritte:

  1. Update auf die neueste PHP-Version
  2. aktivieren OPCache
  3. Disable xdebug
  4. Set realpath_cache_size = 2M als DemonTPx
  5. erwähnt

php.ini Einstellungen:

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 

Warum ist die Windows langsamer als Unix?

Wie diskutiert here, PHP ist sehr langsam in file_exists und filemtime() unter Windows. seit Symfony2 verwendet diese Funktionen im Dev-Modus viel. Unter Windows werden wir nicht unter 700ms (in < = 5.4) kommen. PHP 5.5 erlaubt jetzt 180ms.

Eine Lösung könnte WinCache sein, die von Microsoft entwickelt wurde, um dieses Problem auf IIS zu beheben. Aber da es nur auf mehreren Windows-Versionen und auch nur mit IIS funktioniert, ist es für mich keine Lösung.

Alternative

Auch eine schöne Lösung, die ich empfehlen kann, ist ein Linux Virtual Machine auf Virtualbox haben. Dies ist einfach einzurichten und ähnelt auch mehr der Produktionsumgebung.

+0

Ich habe mit diesen Einstellungen von 10 Sekunden auf 2,5 Sekunden fallen gelassen. Die Deaktivierung von xDebug hat eine spürbare Verbesserung bewirkt und readpath_cache_size auf 2M gesetzt. – Jean

+0

Hallo Jean, immer noch - 2,5 Sekunden ist zu langsam für die Entwicklung. Sie können OPCache in PHP5.5 versuchen, was es schneller machen sollte. –

+0

Das hat mir sehr geholfen! Ladezeit von ~ 500 ms auf ~ 50 ms verkürzt. Vielen Dank! –

19

Ich habe genau das gleiche Problem. Einstellen der folgenden in der php.ini erhöht die Leistung für mich von ~ 800 ms bis 300 ms ~:

php.ini:

realpath_cache_size = 2M 

Immer noch nicht die ~ 100ms ich von einem Unix-Maschine, aber es macht einen Unterschied mindestens

3

Wow, nachdem ich viele verschiedene Dinge versucht habe, ist es mir endlich gelungen, von einer 15s Ausführungszeit auf eine 3s Exec Zeit auf Windows7 mit wamp zu verschieben.

Wie WinCache Erweiterung installieren: http://us2.php.net/manual/en/wincache.installation.php

Wo die WinCache dll herunterladen: http://sourceforge.net/projects/wincache/

Meine php.ini Konfigurationsänderung:

[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 
0

Meine Seiten wurden unter 20 Sekunden bis ausführen. Ich installierte schnelle CGI, erhöhte Speichergrenzen, alles, funktioniert nicht. Dann begann die Zeitleiste zu betrachten und bemerkte, dass das Symfony Firewall-Modul die meiste Zeit in Anspruch nahm. Es stellte sich heraus, dass "localhost" in meiner Konfiguration für die Doktrin das war, was Probleme verursachte. Durch Ändern auf 127.0.0.1 wurde das Problem behoben. Nicht sicher, warum, aber es ist hier beschrieben:

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