So oder so ähnlich könnte eine Ausschrift während der Ausführung des Shell-Scripts zur Archivierung der Piwik-Reports aussehen. Dass „irgendein Speicher“ erschöpft ist, kann man der Meldung sicherlich problemlos entnehmen. Und auch, dass augen­scheinlich nur ein paar Byte fehlen, um das PHP-Script erfolgreich auszuführen.
Das hierdurch entstehende Problem bei Piwik ist, dass für dieses Webprojekt dann keine Reports zur Verfügung stehen und es nur die Möglichkeit gibt, entweder das Archivierungs-Script erfolgreich abzuschließen oder wieder die Report-Erstellung auf „Browser“ umzustellen. Bei höheren Zugriffszahlen gehört dies allerdings nicht unbedingt zu der empfohlenen Alternative.

Diese Fehlermeldung wird immer dann angezeigt, wenn der RAM-Speicher, der einem PHP-Script zur Verfügung gestellt wurde, ausgeschöpft ist. Bei einer PHP-Seite im Web könnte man nun das memory_limit per htaccess-Datei erhöhen. Doch da hier die Ausführung auf der Linux-Shell erfolgt, wird das nicht weiter helfen. Es muss also die PHP-Konfiguration für die Kommandozeile angepasst werden.

Fehlermeldung bei der Piwik-Archivierung

        ...
        <result date="2011-03-28 to 2011-04-03">8181</result>
        <result date="2011-04-04 to 2011-04-10" />
</results>
Archiving period = month for idsite = 68...

Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 16 bytes) in /euer/pfad/zu/piwik/core/DataTable.php on line 432

Archiving period = year for idsite = 68...

Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 262255 bytes) in /euer/pfad/zu/piwik/core/DataTable.php on line 936

Archiving for idsite = 68 done!

Problembehebung

Wer Zugriff auf die Server-Einstellungen für PHP hat, z.B. auf einem vServer oder root-Server, kann den Wert einfach erhöhen.

Auf einem Debian-System liegt die anzupassende Datei unter /etc/php5/cli/php.ini und hier muss der Wert für memory_limit angehoben werden. Dieser steht eventuell bei 32 MB oder 64 MB. Verdoppelt diesen im ersten Schritt und startet den Apachen neu.

apache2ctl -t
sudo /etc/init.d/apache2 force-reload
su www-data -c "sh /euer/pfad/zu/piwik/misc/cron/archive.sh"

Sollte es keinen weiteren Fehler beim Ausführen des Scripts archive.sh geben, dann hat der PHP-Ausführungsspeicher ausgereicht. Falls nicht, dann heißt es erneut in der /etc/php5/cli/php.ini den memory_limit zu erhöhen. Auf meinem System habe ich den Wert auf 512 MegaByte angehoben.