Fehlerbeschreibung
Beim Update von Nextcloud 30 auf 31 mittels CLI schlägt das Update im Schritt "Verify integrity" fehl, mit der Meldung, dass nur 256 MB RAM zugeteilt ist, jedoch mehr angefordert wurde, obwohl dem Webserver selbst 512 MB zur Verfügung stehen.
Meldung im Update-Vorgang:
[✔] Check for expected files
[✔] Check for write permissions
[✔] Create backup
[✔] Downloading
[ ] Verify integrity ...PHP Fatal error: Allowed memory size of 268435456 bytes exhausted (tried to allocate 267398904 bytes) in phar:///var/www/XYZ/XYZ-SERVER-PFAD/updater/updater.phar/lib/Updater.php on line 681
Es wurde von Nextcloud 30.0.12 auf 31.0.6 versucht zu update, bei einem vorherigen Update-Versuch schlug dies jedoch bereits ebenfalls fehl, deshalb war es Zeit auf die Lösungssuche zu gehen.
Auf Fehlersuche
Da der Webserver selbst tatsächlich mit 512 MB pro PHP-Prozess konfiguriert ist (ersichtlich sowohl in den Cloud-Pit-Einstellungen / Admin-Interface des genutzten Hosters, als auch in den PHP-Infos der Nextcloud Installation (Administrationseinstellungen --> System --> PHP --> Speicherlimit: 512 MB), kam die Vermutung auf, dass andere Limitierungen beim Zugriff mittels CLI greifen. Die PHP.INI konnte leider nicht eingesehen oder bearbeitet werden.
Wird über die CLI das PHP-Memory-Limit abgefragt, greift tatsächlich eine Beschränkung von 256 MB.
php -i | grep "memory_limit"
memory_limit => 256M => 256M
Zeit für ein Support-Ticket beim Hoster
... um die Ursache für diese Differenz zu finden. Antwort des Support:
... der SSH-Zugang nutzt beim Abruf von bspw. dem memory_limit einen internen Standard PHP-FPM des Servers selbst, wodurch beim Abruf nur ein memory_limit von 256MB gezeigt wird ...
Als erster Lösungsvorschlag wurde seitens Support probiert, dass Speicherlimit auf den nächst höheren Tarif zu upgraden, in der Hoffnung, dass sich auch besagter Standard-Wert erhöht. Dem Webserver standen jetzt als neues memory_limit 768 MB zur Verfügung. Dies änderte jedoch am verfügbaren Speicher mittels SSH-Aufruf, wie fast zu erwarten leider nichts.
Lösungsvorschlag
Seitens Support wurde der Vorschlag gemacht, das memory_limit mittels PHP-Parameter für den einzelnen Befehlsaufruf temporär zu erhöhen. Das hat schließlich funktioniert, wenngleich während das Update-Vorgangs auf Nextcloud 31 weiterhin Warnungen angezeigt wurden, dass weniger als 512 MB-Speicher zur Verfügung stehen.
Nextcloud ist deshalb zukünftig wie folgt zu updaten:
php -d memory_limit=512M updater/updater.phar
Update-Vorgang erfolgreich, es verbleibt lediglich eine Warnung und keine Speicherallokaitonsproblem mehr.
[✔] Check for expected files
[✔] Check for write permissions
[✔] Create backup
[✔] Downloading
[✔] Verify integrity
[✔] Extracting
[✔] Enable maintenance mode
[✔] Replace entry points
[✔] Delete old files
[✔] Move new files in place
[✔] Done
Update of code successful.
Should the "occ upgrade" command be executed? [Y/n] Y
The current PHP memory limit is below the recommended value of 512MB.