Speicherprobleme in Nextcloud auf Webhosting

  • Hallo zusammen,

    wünsche allen, schöne Weihnachten gehabt zu haben! ;)

    Ich betreibe auf einem Webhosting 8000 SE zwei Nextcloud-Instanzen in der jeweils aktuellsten Version (derzeit 30.0.4). Natürlich beide mit geringer Last und nur jeweils zwei Benutzern, das Hosting ist logischerweise relativ limitiert.

    Auf einer Instanz habe ich seit einigen Tagen mir nicht recht erklärliche Probleme. Der eingerichtete Cronjob schlägt fehl und wirft die Meldung:

    PHP Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 24576 bytes) in /var/www/vhosts/hosting118930.a2fa9.netcup.net/nextcloud.$domain.de/lib/private/Blurhash/Listener/GenerateBlurhashMetadata.php on line 85

    Zusätzlich hängt sich der Nextcloud-Client regelmäßig auf, wenn ich Ordner mit (grob geschätzt) mehr als 80 Dateien in die Nextcloud schiebe und diese entsprechend hochgeladen werden müssten.

    Hier kommt es im Log zu Fehlermeldungen wie:

    Allowed memory size of 134217728 bytes exhausted (tried to allocate 76354224 bytes) at /var/www/vhosts/hosting118930.a2fa9.netcup.net/nextcloud.$domain/lib/private/Files/Storage/Local.php#296

    Bei Ordnern mit weniger Dateien klappt es nach wie vor zuverlässig und der Upload von großen Ordnern über die Weboberfläche der Nextcloud funktioniert auch. Weitere Fehler im Log lauten:

    DbalException An exception occurred while executing a query: SQLSTATE[40001]: Serialization failure: 1213 Deadlock found when trying to get lock; try restarting transaction

    Ich laufe also offenbar in Speicherlimits, verstehe aber leider nicht, an welcher Stelle genau. Es gab keine Konfigurationsänderung an dieser Instanz und die zweite Nextcloud läuft auf dem selben Hosting ja auch nach wie vor problemlos.

    Ich wäre daher sehr dankbar für jeden Tipp...

    2 Mal editiert, zuletzt von Supporter (30. Dezember 2024 um 14:59) aus folgendem Grund: Infos ergänzt.

  • Wenn es der Cronjob ist, dann würde ich mal nachprüfen welches memory_limit in der Konsole (also für das PHP-CLI) eingestellt ist. Mir war so, als sei das seit einiger (längerer) Zeit per Default auf 128M eingestellt. Im Zweifelsfall mal beim Cronjob das gewünschte memory_limit mit angeben.

    Edit, gerade in einem 4000er getestet

    Code
    bash-5.1$ php -i | grep memory_limit
    memory_limit => 128M => 128M
    bash-5.1$ php -d memory_limit=1024M -i | grep memory_limit
    memory_limit => 1024M => 1024M

    Einmal editiert, zuletzt von tab (30. Dezember 2024 um 14:32)

  • Vielen Dank für Deinen Input!

    Ich bekomme dieselben Ausgaben wie Du, also

    Code
    memory_limit => 128M => 128M

    und nach Ausführung des zweiten Befehls

    Code
    memory_limit => 1024M => 1024M

    Wenn ich dann allerdings erneut abfrage, erhalte ich wieder:

    Code
    bash-5.1$ php -i | grep memory_limit
    memory_limit => 128M => 128M

    Im Control Panel sieht eigentlich alles gut aus, würde ich meinen:

    php_info.png


    Im Zweifelsfall mal beim Cronjob das gewünschte memory_limit mit angeben.

    Wie genau kann ich das tun?

  • Ja, der Parameter bewirkt ja keine dauerhafte Erhöhung, nur für den einen Aufruf. Wenn du das (-d memory_limit=1024M) also in deinen Aufruf des Nextcloud-Cronjobs (cron.php) einbaust, dann wird der Cronjob mit höherem memory_limit laufen. Die PHP-Info im Control Panel gilt nur für den Webprozess, aber nicht für die Kommandozeile, das sind zwei Paar Stiefel.

    Im Webprozess hast du tatsächlich das hohe Limit von 1024 MB voreingestellt, außer du setzt es selbst niedriger. Bis vor einigen Jahren war das auch in der Kommandozeile per Default so, aber es wurde irgendwann geändert auf 128 MB. Braucht man mehr, muss man jetzt halt den Parameter mitgeben. Auch beim Aufruf von occ wird man zur Erhöhung des Limits aufgefordert. Ich glaube der will 512M haben, also wird das wohl auch für den Cronjob reichen.

  • Allerbesten Dank für Deine Hilfe!

    Aus reiner Noobigkeit hatte ich zunächst versucht, den Befehl in den Cronjob selbst zu integrieren, was natürlich nicht geklappt hat. Erst später habe ich dann entdeckt, wo ich bei Netcup zusätzliche Argumente zur Ausführung von Cronjobs beifügen kann.

    Ich habe dann noch etwas Housekeeping innerhalb der Nextcloud betreiben müssen (Logdateien löschen etc.), aber nun läuft sowohl der Cronjob als auch der Upload größerer Ordner wieder wie es soll.

    Du warst eine echte Unterstützung und ich wünsche Dir ein 2025 mit sauberem Code und ohne jeden Bug.