Piwik, PHP und der Memory Limit…

Über Monate habe ich mich nun mit einem Problem rum geärgert. Eigentlich ist die Lösung sehr simpel.

Die Vorgeschichte

In meiner Agentur setzen wir Piwik Web Analytics ein, um Besucher auf den Kundenwebseiten zu untersuchen. Es ist eine Alternative zu Google’s Analytics und bietet das eine oder andere Zusatzfeature.

Namentlich

  • lässt sich die API einiges einfacher auslesen
  • können die Daten können Inhouse gespeichert werden
  • kann eine Live Ansicht der Besucher angezeigt werden
  • werden mehr als 800 Suchmaschinen erkannt
  • gibt es ein kostenloses App für Android und iPhone

Für mehr Funktionalitäten gibt es auch eine komplette Liste der Piwik Features

Das Problem

Je länger die Installation läuft, desto mehr Daten werden „gesammelt“. Um den Speicherbedarf zu senken, bietet Piwik eine Autoarchivierung.
Standartmässig werden alle Daten direkt beim Aufruf aus dem WebUI archiviert. Für grosse Datenmengen wird von Piwik empfohlen, eine Autoarchivierung der Daten via Unix Cronjob anzulegen.

Gute Sache! Das Autoarchivierungs Tutorial auf der Piwik Seite zeigt in einfachen Schritten wie die Archivierung umgestellt werden kann.
Je grösser jedoch die Archivierungsdaten jedoch werden, desto mehr Arbeitsspeicher benötigt Piwik um alles sauber bündeln. Ich habe dazu Vorsichtshalber den memory_limit auf 512M in der php.ini hochgesetzt, wie auf der Webseite erwähnt.

Trozdem, hatte ich immer den selben Fehler:

    Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate X bytes)

Wenn man das ganze ausrechnet, kommt man auf 128MB Speicher die Limitiert sind.. Ich hatte doch eben das Limit auf 512M gesetzt!?

Die Lösung

Erst habe ich am verstaubten Linux Server gezweifelt. Eigentlich hatte mich die Kiste noch nie im Stich gelassen. Ich dachte immer sie stirbt einen theatralischen Tod mit funken, explosionen und einem Kabelbrand bevor sie den Job an den Nagel hängt.

Da der Server jedoch mehr als genug Speicher liefert (schliesslich läuft auf dem Server nur Piwik), wurde diese Möglichkeit ausgeschlossen.

Nach langem suchen und der Anfrage im Benutzerforum von Piwik bin ich auf diesen Artikel gestossen. Da war sie. Die Lösung. Simpler hätte es wohl nicht sein können.

Das Hardened-PHP Project hatte ganze arbeit geleistet. Mit Ihrem Suhosin Patch, der bei Ubuntu Server standartmässig mitinstalliert wird, hat mich ausgehebelt. Dabei lag es doch auf der Hand. PHP5 wird mit einem memory_limit von 128M „ausgeliefert“. Der Sicherheitspatch hat voll und ganz funktioniert.

Um Suhosin klar zu machen, dass das laufende PHP-Script doch mehr Speicher benötigt sind folgende Schritte nötig:

1. Bearbeitet eure php.ini und setzt das memory_limit auf den gewünschten Wert

    sudo vi /etc/php5/cgi/php.ini
    sudo vi /etc/php5/cli/php.ini
    sudo vi /etc/php5/apache2/php.ini
    memory_limit = 512M

2. Bearbeitet die Konfiguration von Suhoshin.

    sudo vi /etc/php5/conf.d/suhosin.ini

Die Datei ist bei euch nicht vorhanden? Kein Problem. Ihr könnt sie mit folgendem Code nachinstallieren.

    sudo aptitude install php5-suhosin

3. Setzt das memory_limit in der suhosin.ini auf mindestens 512M (der Wert sollte immer gleich oder höher als der in der php.ini sein)

    suhosin.memory_limit = 512

Diese Lösung ist nur für einen Dedicated Server gedacht. Auf Shared Hostings werdet ihr wohl kaum den Zugriff haben.

4. Webserver neustarten

    sudo service apache2 restart

Generell gilt, das memory_limit sollte nicht ohne triftigen Grund erhöht werden. PHP Scripts sollten immer so geschrieben werden, dass sie nicht an die memory_limit Grenzen stossen. In diesem Fall hatte ich jedoch keine andere Wahl.

Wenn Ihr auch Probleme mit dem memory_limit hattet, lasst es mich in einem kurzen Kommentar wissen 😉

0 Kommentare

Dein Kommentar

Want to join the discussion?
Feel free to contribute!

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.