Frage

Hier ist meine erste Frage bei SO.

Ich habe eine interne Anwendung für mein Unternehmen, die ich kürzlich pflegen soll.Die Anwendungen sind in PHP erstellt und ziemlich gut codiert (OO, DB Abstraction, Smarty), nichts WTF-artiges.

Das Problem sind die Anwendungen sehr langsam.

Wie kann ich herausfinden, was die Anwendung verlangsamt?Ich habe den Code so optimiert, dass nur sehr wenige DB-Abfragen durchgeführt werden, daher weiß ich, dass die Ausführung des PHP-Codes eine Weile dauert.Ich benötige einige Tools, die mir dabei helfen können, und muss eine Strategie zur Überprüfung meines Codes entwickeln.

Ich kann die Prüfungs-/Strategiearbeit selbst erledigen, aber ich brauche mehr PHP-Tools, um herauszufinden, wo meine App kaputt geht.

Gedanken?

War es hilfreich?

Lösung

ich verwendet habe, XDebug Profilierung vor kurzem in einer ähnlichen Situation. Es gibt einen vollständiges Profil Bericht, der mit vielen gängigen Profilierungs Anwendungen gelesen werden kann (können Ihnen nicht eine Liste geben, obwohl, habe ich nur die eine, die mit Slackware kam).

Andere Tipps

Als Juan erwähnt, ist xDebug ausgezeichnet. Wenn Sie unter Windows sind, WinCacheGrind lassen Sie die Berichte schauen.

Sehen Sie diese Präsentation von Rasmus Lerdorf (Schöpfer von PHP). Er geht in ein paar gute Beispiele für Testen von PHP-Geschwindigkeit und was für so manchen Einbauten als auch zu suchen, die Dinge verlangsamen. XDebug ist ein Werkzeug, das er verwendet. Er macht auch einen sehr festen Punkt, um zu wissen, was die Leistung Kosten Sie sich einlassen mit Rahmen.

Video: http://www.archive.org/details/simple_is_hard

Folien (da es hart auf dem Video zu sehen): http://talks.php.net/show/drupal08/1

Es gibt viele Variablen, die die Leistung Ihrer Anwendung auswirken können. Ich empfehle, dass Sie nicht sofort annehmen, PHP ist das Problem.

Erstens: Wie dienen Sie PHP? Haben Sie versucht, grundlegende Optimierung von Apache oder IIS selbst? Ist der Server ausgelastete Verarbeitung andere Arten von Anfragen? Haben Sie die Vorteile eines PHP-Code-Beschleuniger genommen? Eine Möglichkeit, zu prüfen, ob der Server Ihr Engpass ist zu versuchen, auf einem anderen Server die Anwendung ausgeführt wird.

Zweitens ist die Leistung der gesamten Anwendung langsam oder scheint es nur bestimmte Seiten zu beeinflussen? Dies könnten Sie einen Hinweis darauf, wo die Leistung beginnen zu analysieren. Wenn die gesamte Anwendung langsam ist, ist das Problem eher in der zugrunde liegenden Server / Plattform oder mit einem globalen SQL-Abfrage, die Bestandteil jeder Anfrage (Benutzerauthentifizierung, zum Beispiel) ist.

Drittens erwähnt die Anzahl der SQL-Abfragen zu minimieren, aber was die bestehenden Abfragen optimieren? Wenn Sie MySQL verwenden, nehmen Sie die Vorteile der verschiedenen Stärken jedes Speichersystem? Haben Sie laufen ERKLÄREN auf Ihre wichtigsten Abfragen, um sicherzustellen, sie sind korrekt indiziert? Dies ist entscheidend für Abfragen, die großen Tabellen zuzugreifen; je größer die Datenmenge, desto mehr werden Sie die Auswirkungen der schlechten Indizierung bemerken. Zum Glück gibt es viele Artikel wie diese ein die erklären, wie EXPLAIN zu verwenden.

Viertens ein häufiger Fehler ist anzunehmen, dass der Datenbankserver automatisch alle Ressourcen zur Verfügung, um das System nutzen werden. Sie sollten überprüfen, um sicherzustellen, dass Sie explizit über ausreichende Ressourcen, um Ihre Datenbank-Anwendung zugewiesen haben. In MySQL, zum Beispiel, sollten Sie benutzerdefinierte Einstellungen (in Ihrer my.cnf-Datei) für Dinge wie Schlüsselpuffer, temporäre Tabellengröße, Gewinde Gleichzeitigkeit, innodb Pufferpoolgröße, etc. hinzuzufügen.

Wenn Sie noch doppelt überprüft alle der oben genannten und noch nicht den Engpass zu finden, kann ein Code Profiler wie Xdebug auf jeden Fall helfen. Ich persönlich ziehe den Zend Studio Profiler, aber es kann nicht die beste Option sein, wenn Sie bereits die Vorteile des Restes der Zend Platform Stapel einnehmen. Nach meiner Erfahrung ist es jedoch sehr selten, dass PHP selbst die Ursache für geringe Leistung ist. Oft kann ein Code Profiler helfen Sie mit mehr Präzision zu bestimmen, die DB-Abfragen sind schuld.

PhpED ( http://www.nusphere.com/products/phped.htm) bietet auch große Debuggen und Profilieren, und die Fähigkeit, Uhren, Breakpoints, usw. in PHP-Code hinzuzufügen. Der integrierte Profiler bietet direkt eine Zeit Abbau von jedem Funktionsaufruf und Klassenmethode innerhalb der IDE. Browser-Plugins auch die schnelle Integration mit Firefox oder IE ermöglichen (das heißt langsam URL mit Browser besuchen, dann auf die Schaltfläche klicken, um das Profil oder debug).

Es ist in dem Hinweis auf sehr nützlich, in denen die App langsam ist, um die meisten Codierungsaufwand zu konzentrieren; und es vermeidet verschwendet Zeit bereits schnellen Code zu optimieren. Nachdem versucht, Zend und Eclipse habe ich jetzt auf der Benutzerfreundlichkeit von PhpED verkauft.

Beachten Sie sowohl Xdebug und PhpED (mit DBG) wird eine zusätzliche PHP-Modul installiert benötigen, wenn sie gegen einen Webserver debuggen. PhpED bietet auch (untried von mir) einer lokalen Debug-Option zu.

Xdebug Profil ist definitiv der Weg zu gehen. Noch ein Tipp - WinCacheGrind ist gut, aber nicht aktualisiert worden. http://code.google.com/p/webgrind/ - in einem Browser kann sein eine einfache und schnelle Alternative.

Die Chancen stehen aber es ist immer noch die Datenbank sowieso. Suchen Sie nach relevanten Indizes -. Und dass es genügend Speicher hat, um so viel von den Arbeitsdaten wie möglich zwischenzuspeichern

Auch könnten Sie verwenden APD (Advanced PHP Debugger).

Es ist ganz einfach, es funktioniert.

$ php apd-test.php

$ pprofp -l pprof.SOME_PID

Trace for /Users/martin/develop/php/apd-test/apd-test.php
Total Elapsed Time = 0.12
Total System Time  = 0.01
Total User Time    = 0.07


         Real         User        System             secs/    cumm
%Time (excl/cumm)  (excl/cumm)  (excl/cumm) Calls    call    s/call  Memory Usage Name
--------------------------------------------------------------------------------------
71.3 0.06 0.06  0.05 0.05  0.01 0.01  10000  0.0000   0.0000            0 in_array
27.3 0.02 0.09  0.02 0.07  0.00 0.01  10000  0.0000   0.0000            0 my_test_function
 1.5 0.03 0.03  0.00 0.00  0.00 0.00      1  0.0000   0.0000            0 apd_set_pprof_trace
 0.0 0.00 0.12  0.00 0.07  0.00 0.01      1  0.0000   0.0000            0 main

Es gibt ein nettes Tutorial, wie APD zu kompilieren und machen Profilierung mit sich: http: / /martinsikora.com/compiling-apd-for-php-54

ifs seine eine große Codebasis versuchen apc wenn Sie nicht bereits sind.

http://pecl.php.net/package/APC

Sie können auch versuchen, die register_tick_function Funktion in PHP. was sagt PHP eine bestimmte Funktion aufzurufen periodcally durch aus Ihrem Code. Sie könnten dann verfolgen, welche Funktion derzeit ausgeführt wird und die Höhe der Zeit zwischen den Anrufen. dann könnte man sehen, was die meiste Zeit ist Einnahme. http://www.php.net/register_tick_function

Wir verwenden Zend Development Environment (Windows). Wir beschlossen, eine Speichernutzung Spike gestern durch den Debugger Schritt während Process Explorer läuft der Speicher / cpu / Plattenaktivität zu beobachten, wie jede Zeile ausgeführt wurde.

Process Explorer: http://technet.microsoft.com/en- us / Sysinternals / bb896653.aspx .

ZDE enthält eine grundlegende Performance Profiler, die Zeit damit verbracht in jedem Funktionsaufruf während der Seitenanfragen zeigen kann.

Ich verwende eine Kombination von PEAR Benchmark und log4php .

An der Spitze von Skripten ich ein Profil erstellen möchten erstelle ich ein Objekt, das um eine Benchmark_Timer Objekt. Während des gesamten Code, füge ich in $object->setMarker("name");calls, vor allem um verdächtigen Code.

Die Wrapper-Klasse hat eine Methode destroy, die die Logging-Informationen nehmen und schreibt sie in log4php. Ich sende dies in der Regel zu syslog (vielen Server, aggregiert zu einer Protokolldatei auf einem Server).

debug, kann ich die Log-Dateien anschauen und sehen, wo ich Dinge verbessern müssen. Später in der Produktion, kann ich die Log-Dateien analysiert und Performance-Analyse tun.

Es ist nicht xdebug, aber es ist immer auf und gibt mir die Möglichkeit, alle zwei Ausführungen des Codes zu vergleichen.

Sie können an der schauen auch HA-Proxy oder jede andere Load Balancing Lösung, wenn Ihr Server verschlechterte Leistung ist die Ursache für die Anwendung langsam Verarbeitung. Server.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top