Wo kann möglicherweise ein Speicherleck in PHP und wie es untersucht werden?

8

Ich verwende das Codeigniter Framework (Entwicklungsversion von GitHub) für eines meiner Projekte. Das Projekt selbst ist nicht groß, nur ein paar Controller und Modelle und ich habe ein Speicherleck. In 12 Stunden gehen meine Rams ständig hoch und ich muss php5-fpm neu starten, um sie zu säubern. Wo soll ich nach einem Speicherleck suchen? Ich meine, ist es Schleifen oder Variablen und welche Werkzeuge kann ich dafür verwenden, zu untersuchen?

    
d4mn 10.04.2014, 08:26
quelle

3 Antworten

8

Eine sehr alte Frage, aber für diejenigen, die mit diesem Problem konfrontiert sind (da es immer noch ein Problem für einige von uns mit CodeIgniter ist) ... pro Entwickler: Standardmäßig behält CodeIgniter ein Array mit Ihrem Verlauf von Abfragen bei.

Schauen Sie in save_queries auf false in Ihrer Datenbankkonfiguration.

Ich hatte das gleiche Problem mit einem Arbeitsprojekt und dies hat unseren Speicherverbrauch drastisch reduziert.

    
kungphu 03.03.2016 06:40
quelle
1

Wenn Sie die genaue Ursache für Ihr Speicherleck finden müssen, empfehle ich Ihnen, einen Speicherprofiler wie XHProf zu verwenden.

Dies ist der beste Weg, um die PHP-Skripte zu debuggen und was die Ursache für Speicherverlust ist.

    
cedzz 28.07.2016 15:27
quelle
1

Achten Sie auf:

1) Cron-Jobs

2) Abfragen mit '*' und

3) Abfragen, die Tabellen ohne INDEXES verwenden.

4) Besonders lange, nicht optimierte Abfragen. Sie sind beispielsweise Abfragen mit vielen Subselects.

5) Führen Sie diese Abfragen mit einer EXPLAIN-Anweisung aus und ermitteln Sie, welche Tabellen optimiert werden sollen. Lesen Sie hier, wie Sie erklären können: Verwenden von explain

Sie sollten etwas wie New Relic auf Ihrem Server / Ihrer App installieren, es verfügt über einen kostenlosen Tier-Modus, mit dem Sie lange Abfragen finden können und Prozesse.

Nun gehe ich davon aus, dass es keine größere Verarbeitung gibt, die Sie tun, und uns beispielsweise von langen Listen der Bildverarbeitung nicht erzählt hat.

Das könnte eine Bestie einer Maschine töten, wenn sie nicht optimiert ist.

Denken Sie daran, dass lange Schleifen auch ein Speicherleck sein können. Wenn das der Fall ist, könnten Sie zum Beispiel versuchen, von foreach-Schleifen für for-Schleifen zu wechseln.

    
andretzermias 02.08.2016 12:28
quelle

Tags und Links