nextcloud: Befehl Killed bei "occ db:add-missing-indices"

Teckler

Lt. Commander Pro
Registriert
Mai 2020
Beiträge
1.455
Hallo zusammen,

habe am Wochenende meiner nextcloud ein update von 20.08 auf 21.01. über den stabilen update Kanal gegönnt.
Wollte jetzt die üblichen Fehlerchen beim Versionswechsel wegzaubern.
Diesmal scheitert aber die Datenbank Indizierung beim fehlenden Index "fs_size" in der Tabelle "oc_filecache: mit dem Befehl:
sudo -u www-data php occ db:add-missing-indices
Ich starte den Befehl aus dem Verzeichnis :/var/www/nextcloud$
Ergebnis nach ein paar Sekunden Wartezeit: Killed

Habe eine Standardinstallation auf einem Mini PC mit N5000 CPU mit:
ubuntu 20.04.2LTS, MariaDB 10.3.25, Apache 2.4.41, PHP 8.0.3

Nach dem Nextcloud update hab ich PHP Update von 7.4.3 auf die 8.0.3 gemacht.
Das war schon merkwürdig hakelig, beim Umschalten auf die neue Version hatte die nextcloud gemeckert mit "Internal Server Error"
Nach zurückwechseln auf 7.4.3 und dann wieder auf 8.0.3 liefs plötzlich
Ob jetzt PHP an dem Datenbank Fehler beteiligt sein kann weiß ich nicht.

Ich könnte auch wieder zurück auf die 20.08 und Nextcloud und PHP update nochmal richtig machen falls ich evtl an der Reihenfolge etwas versemmelt hab.

Jetzt wird es interessant, hab ein Protokoll mit "dmesg -T -l err" gefunden:
[Mo Apr 12 16:34:49 2021] Out of memory:
Killed process 1781 (php) total-vm:11359564kB, anon-rss:7303820kB, file-rss:3212kB, shmem-rss:0kB, UID:33 pgtables:22220kB oom_score_adj:0

Out of memory ... Hardware oder doch eher PHP Fehler ?

Die Kiste hat 8GB RAM
Meine geänderten Einstellungen in /etc/php/8.0/apache2/php.ini
memory_limit = 1024M
upload_max_filesize = 16G
post_max_size = 16G
date.timezone = Europe/Berlin

Hätte jemand eine Idee ..oder ist sogar übers gleiche Problem gestolpert ?

Danke vorab und Gruß an Alle
 
Teckler schrieb:
Killed process 1781 (php) total-vm:11359564kB, anon-rss:7303820kB, file-rss:3212kB, shmem-rss:0kB, UID:33 pgtables:22220kB oom_score_adj:0
11359564kB sind ca. 11GB. Wahrscheinlich wurde noch etwas auf die Platte geswappt, irgendwann war dann aber auch Schluss.
Warum hast du den Parameter memory_limit auf 1024M gesetzt? Standardwert ist wohl 64M, wenn ich mir das so anschaue. Laut dem, was ich hier so lese, geht es dabei auch nicht um ein Gesamtlimit, sondern das Limit pro Skript. Und das kann dann natürlich auch dazu führen, dass PHP mal eben 11GB RAM belegt. Stell es mal runter und schau nochmal.

Fortführende Lektüre: https://haydenjames.io/understanding-php-memory_limit/

PHP memory_limit is a per-script setting

 
  • Gefällt mir
Reaktionen: Teckler
512MB sind von Nextcloud empfohlen, Würde auf 512MB Memory_Limit gehen.
Ich habe letzte Woche eine äußerst Große Nextcloud auf einen neuen Server umgezogen und auf 21.0.1 aktualisiert. Alles wunderbar mit den gleichen Versionen (PHP 8, MariaDB 10.3...)
 
  • Gefällt mir
Reaktionen: burglar225 und Teckler
Danke @burglar225 und @truetone 👍
werde memory_limit auf 512M runtersetzen und melde mich wieder
Glaube ich hab irgendwo mal einen Tipp dazu aufgeschnappt das hochzusetzen wenn man genug RAM hat.
Beim letzten Versionsupdate gabs keine Probleme damit
Gerade läuft Sicherung falls ich dann doch wieder zurück muss.
Bin mir nicht sicher ob es vielleicht auch Zugriffsberechtigungsproblem ist
Im phpmyadmin sehe ich zwar eine Zugriffssperre.. weiß aber nicht ob das vorher auch schon war.
Dann hab ich noch einen Fehler "PHP configuration option output_buffering must be disabled" den ich als nächstes angehen wollte.. auf einem anderen Testsystem bekomme ich den nicht weg.
 
Teckler schrieb:
Glaube ich hab irgendwo mal einen Tipp dazu aufgeschnappt das hochzusetzen wenn man genug RAM hat.
Um ehrlich zu sein, würde ich 8GB dazu nicht zählen :D So wenig wie möglich, so viel wie nötig lautet hier die Devise.

Teckler schrieb:
Beim letzten Versionsupdate gabs keine Probleme damit
Du hast eine Operation zum Update der Datenbank durchgeführt. Dabei kann der RAM-Bedarf auch mal recht hoch ausfallen.

Teckler schrieb:
Bin mir nicht sicher ob es vielleicht auch Zugriffsberechtigungsproblem ist
Wenn der Linux-Kernel als unterste Instanz sagt, dass nicht genug RAM da ist, dann kannst du davon ausgehen, dass das so stimmt.

Ansonsten, als Tipp, wenn du mal wieder in Lern- und Bastellaune bist, schau dir Docker an. (Meistens) ist ein Nextcloud-Update dann so einfach:
Bash:
docker-compose pull
docker-compose up -d
Auch eine Migration wie sie in deinem Fall nötig wäre, ist möglich.
 
  • Gefällt mir
Reaktionen: Teckler
truetone schrieb:
Ich habe letzte Woche eine äußerst Große Nextcloud auf einen neuen Server umgezogen und auf 21.0.1 aktualisiert. Alles wunderbar mit den gleichen Versionen (PHP 8, MariaDB 10.3...)
Wie war Dein Ablauf ?
Zuerst nextcloud update und dann PHP ?
Ich hab auf dem Bastel PC zuerst PHP 8.0, dann Nextcloud update gemacht und dann erst die PHP 8.0 aktiviert... dort läufts

burglar225 schrieb:
Ansonsten, als Tipp, wenn du mal wieder in Lern- und Bastellaune bist, schau dir Docker an. (Meistens) ist ein Nextcloud-Update dann so einfach:
Diese nextcloud Bastelei ist teilweise schon recht mühsam und extrem zeitaufwendig.. da hast Du Recht
Falls ich mir demnächst einen Jasper Lake Mini PC gönne ist die Docker Geschichte definitv eine Option.
 
Von dort:
Try to enable apc.enable_cli=1 in /etc/php/8.0/cli/conf.d/20-apcu.ini. After I added that line to the file occ worked and the memory didn't get filled anymore.
Scheint bei manchen aber nicht allen zu funktionieren. (War nur ein Tippfehler von jemandem.)
 
  • Gefällt mir
Reaktionen: Teckler
Auch mit memory_limit = 512M wird der Befehl gekillt

[Mo Apr 12 17:57:12 2021] Out of memory:
Killed process 1421 (php) total-vm:11609536kB, anon-rss:7525560kB, file-rss:2856kB, shmem-rss:0kB, UID:33 pgtables:22696kB oom_score_adj:0

@BigO und @burglar225 danke für die Tipps !
Ich hätte jetzt das probiert:
In my case commenting out
'memcache.local' => '\\OC\\Memcache\\APCu' in config.php helped to succesfully run occ again.

Dann hab ich ja wieder was zu basteln

Try to enable apc.enable_cli=1 in /etc/php/8.0/cli/conf.d/20-apcu.ini. After I added that line to the file occ worked and the memory didn't get filled anymore.

In der Datei hab ich nur den Eintrag:
extension=apcu.so

habe das angehängt und rebootet
apc.enable_cli=1

Und siehe da.. läuft und Fehler ist weg !

Check indices of the share table.
Check indices of the filecache table.
Adding additional size index to the filecache table, this can take some time...
Filecache table updated successfully.
Check indices of the twofactor_providers table.
Check indices of the login_flow_v2 table.
Check indices of the whats_new table.
Check indices of the cards table.
Check indices of the cards_properties table.
Check indices of the calendarobjects_props table.
Check indices of the schedulingobjects table.
Check indices of the oc_properties table.


Würdet Ihr den Eintrag apc.enable_cli=1 wieder entfernen ?

Bin begeistert von der Kompetenz hier im Form 👍

Danke nochmal ... Morgen mache ich weiter mit 😅
  • PHP configuration option output_buffering must be disabled
 
Zuletzt bearbeitet:
Wo hast du das her?
Der "offizielle" Workaround ist der, den ich oben beschrieben habe. S. https://github.com/nextcloud/server/issues/25742
Das steht sogar genauso im offiziellen Handbuch: https://docs.nextcloud.com/server/2...uration_server/caching_configuration.html#id1
APCu is disabled by default on CLI which could cause issues with nextcloud’s cron jobs. Please make sure you set the apc.enable_cli to 1 on your php.ini config file or append --define apc.enable_cli=1 to the cron job call.
Weiterhin soll die Funktion, die du deaktivieren willst, laut Handbuch aktiviert sein:
After restarting your Web server, add this line to your config.php file:

'memcache.local' => '\OC\Memcache\APCu',
Ergänzung ()

Teckler schrieb:
Würdet Ihr den Eintrag apc.enable_cli=1 wieder entfernen ?
Nein, auf gar keinen Fall. Wie gesagt wird ja im Handbuch explizit gesagt, dass die Option hinzugefügt werden soll beim Update.
Viel Spaß weiterhin :)
 
Zuletzt bearbeitet:
  • Gefällt mir
Reaktionen: menace_one und Teckler
burglar225 schrieb:
Wo hast du das her?
Meinste mich ?
Das war der erste Lösungsansatz im Link von @BigO
1618244518575.png


Aber läuft ja auch so.

Dachte ich bin auf der sicheren Seite mit der V21.0.1 aus dem stabilen update Kanal.
Mit der V21.0.0 aus dem Beta Kanal hatte ich keine Probleme.
Man lernt nie aus ... Danke nochmal :schluck:
 
  • Gefällt mir
Reaktionen: burglar225
Teckler schrieb:
ist die Docker Geschichte definitv eine Option
gerade mal nachgeschaut, im Dockerfile wird die ini Option (apc.enable_cli=1) gesetzt. D.h. Docker Nutzer bleiben hier glücklicherweise verschont.
 
  • Gefällt mir
Reaktionen: Teckler und burglar225
Dafür liebe ich Docker :D Ich betreibe X verschiedene Services, die PHP brauchen. Glücklicherweise hat mir Docker hier seit jeher jeglichen Schmerz völlig erspart.
 
  • Gefällt mir
Reaktionen: Teckler
Teckler schrieb:
Morgen mache ich weiter mit 😅
  • PHP configuration option output_buffering must be disabled
Um die Sache hier abzuschließen bzw falls noch jemand das gleiche sucht hab ich die Lösung.

Habe nämlich schon mehrere Web Infos dazu gefunden und probiert... aber keine hat funktioniert.

Heute hab ich wohl per Zufall die richtige Info gefunden, und zwar in dem Video (bei ca 8min):

Lösung:

# ini Datei öffnen
sudo nano /etc/php/8.0/apache2/php.ini

# Stand vor der Änderung (Achtung, es gibt 2 Stellen in der Datei !!!) :
; http://php.net/output-buffering
output_buffering = 4096

# Stand nach der Änderung:
; http://php.net/output-buffering
; output_buffering = 4096
output_buffering = off

# apache2 Neustart
sudo systemctl restart apache2

und läuft...
 
ist doch klar, hätt ich dir gleich sagen können...

Ne im Ernst, was bedeutet die Änderung?
Vor der Änderung wurde der CLI output der upgrade routine gepuffert und dieser Puffer ist dann voll gelaufen?

Das so etwas nicht auffällt und nicht per default "fail safe" konfiguriert ist.
 
Zurück
Oben