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?
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.
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.
Tags und Links memory-leaks php codeigniter