Arbeitsspeicher läuft über

Hallo, ich habe ein weiteres Problem.

Wenn ich meine Bilder in der Nextcloud anschaue, läuft in relativ kurzer Zeit mein zugewiesener Speicher der Nextcloud-VM voll. Die folge ist eine abgestürzte VM die nur noch über einen Neustart zu retten ist.

Wo liegt das Problem?

Gruß paddl

Proxmox Debian VM.
Nextcloud Hub 7 (28.0.1)

Debian-VM mit PostgressSQL-Datenbank, und PHP8.2.14


nextcloud_speicher

Die Anzeige in Proxmox, sagt da erst mal nicht viel aus. Installiere mal htop in der VM und schaue welcher Prozess dein RAM auffrisst, und wie hoch die RAM Auslastung in der VM tatsächlich ist, und konfiguriere ein SWAP-File, falls die VM keine SWAP-Partition hat.

Hmm, sollte eigentlich nicht sein… Wie ist die RAM-Auslastung des Hostsystems? Hast du den RAM “overprovisioned”, sprich hast du deinen VMs insgesamt mehr Speicher zugewiesen als physisch im Host vorhanden ist, und Ist “Ballooning” an oder aus? (Standard ist “an”)

Vielleicht ist das dann aber auch eher eine Frage für das Proxmox-Forum…

Das Hostsystem hat 32GB und es ist noch einiges frei. Ballooning ist an.

Ich habe mal zwei Snapshots von htop gemacht. Der erste beim betrachten von Bildern, wo man die Auslastung sieht. Das zweite ist nach “Absturz”, wo Nextcloud nicht mehr erreichbar ist.


Hmm, siehst schon so aus, als ob tatsächlich der RAM in der VM vollaufen würde, vorallem auch der SWAP Speicher wird gut genutzt. Dass die VM aber gleich komplett hängt sollte eigentlich trotzdem nicht sein… :thinking:

Nur um sicher zu gehen, hast du auch die RAM Auslastung des Proxmox Hosts kontrolliert, als die VM sich aufgehängt hat? Und falls ja, war die noch im grünen Bereich?

Oh und sortiere doch mal die MEM% Spalte absteigend, und beobachte welche Prozesse am am meisten RAM nutzen, eventuell kann man daraus Rückschlüsse ziehen, wo man allenfalls etwas optimieren müsste…

Ich hab noch mal drei Bilder angehangen. Jeweils mit dem VL-Host und htop aus der Nextcloud-VM, sortiert nach MEM%.

Bild eins zeigt den Leerlauf
Bild 2+3 zeigen den Prozess wenn ich Bilder in der Vorschau anzeigen lasse.

Danach kommt 502 Bad Request vom nginx



Deine Auslagerung ist >75%. Das ist ein Zeichen dafür, dass du viel zu wenig Arbeitsspeicher zugewiesen hast.

Deine Auslastung an PHP-FPM, CPU + RAM, ist sehr hoch.
Da würde ich ja glatt mal behaupten, dass du den Preview für Bilder recht hoch eingestellt hast. Zu dem werkelt da bestimmt noch FFMPEG für die Previews von Videos.

Dass die VM Kiste die Grätsche macht liegt mit aller großer Sicherheit an der voll geschriebenen Auslagerung.

Dann solltest du dir mal die technischen Unterlagen von Intel genauer anschauen. Die T-Serie ist ein Energiesparprozessor und nicht wirklich für Hyper-Treading geeignet.
6 Threads bei 6 Cores. Ein Leistungswunder ist was anderes.

Wenn du 6 Cores der VM zuweist, womit läuft dann der Host?

Fazit:
Die Kiste ist vollkommen damit überfordert, mit dem was du da machst!

Schon mal versucht mit einem Smart4Two einen 2t Anhänger zu ziehen -

grafik

Da muss ich @linux-helmut zumindest teilw. recht geben, was den “Smart4Two einen 2t Anhänger”-Vergelich betrifft :wink: , wobei ich immer noch denke, dass der RAM das Hauptroblem ist und nicht primär die CPU Cores, konkret die hohe SWAP Auslastung.

Und dabei ist natürlich auch noch relevant was die anderen VMs brauchen. CPU Cores kannst du und sollst du überprovisionieren, aber vielleicht nicht jeder VM die maximale Core Anzahl geben, der Nextcloud vielleicht maximum drei oder vier Cores und andern VMs mit weniger CPU intensiven Applikationen vielleicht auch nur einen oder zwei.

RAM hingegen solltest du nicht grossartig überprovisionieren ausser du weisst ganz genau was du machst.

Was ich jetzt versuchen würde:

  1. Mal allen VMs maximal soviel RAM zuweisen, dass wenn du alle zusammenzählst noch etwa 4GB für den Host übrig bleiben. Oder testweise einfach mal ein paar der anderen VMs herunterfahren.

    Wenn es dann besser läuft, kannst du danach den RAM bei einzlnen VMS, die nur kurze Spitzen haben, immer noch wieder erhöhen. Dabei würde ich vielleicht den RAM für Nextcloud sogar auf 8GB erhöhen, und dafür bei andern VMs stärker reduzieren.

    Das kommt aber stark darauf an wieviele User du hast, und wieviele davon gleichzeitig im WebUI arbeiten. Sind das 10 bis 20 User, wären auch 16GB nicht verkehrt, ist das nur deine Familie mit im Schnitt 2 Usern gleichzeitig, oder gar nur du alleine, sollten auch 4GB reichen.

  2. Die SWAPPINESS auf dem Host anpassen, vorallem wenn du ZFS auf dem Host nutzen solltest (was ich bei so vielen VMs mit “nur” 32GB RAM nicht unbedingt empfehlen würde) Versuche die Swappiniess zuerst auf 10 zu stellen und, wenn es immer noch nicht besser wird auf 0. Proxmox - Best performance - Disable swappiness

    Wichtig: (und da wären wir wieder bei Punkt 1) Das bringt nur wirklich was, wenn deine VMs insgesammt nicht mehr RAM verbrauchen als der Host zur Verfügung hat! Damit meine ich den effektiven Verbrauch und nicht was du ihnen zugewiesen hast. Btw. Linux reserviert siche gerne den Grossteil des RAMs, den es zur Verfügung hat, was dann auch zu der Diskrepanz zwischen der RAM Anzeige für die VM in Proxmox und des effektiven Verbrauchs innerhalb der VM führt.

    Trotzdem, und ich sage es nochmal, RAM überprovisionieren kann durchaus kontraproduktiv sein für die Performance, sprich weniger ist hier u.U. mehr, und wenn dem Host der RAM ausgeht, ist Ende Feuer, dann kann man auch mit Tuning nichts mehr machen. :wink:

  3. Den Preview Generator installieren und den in der Nacht via Cronjob laufen lassen. Dann müssen die Vorschaubilder nicht mehr “on the fly” generiert werden, während dem du sie anschaust, was die Last und den RAM Bedarf senken sollte. Preview Generator - Apps - App Store - Nextcloud

  4. PHP-FPM und OPcache optimieren. Die Settings von C-Rieger haben sich bei mir bewährt, auch weil sie berücksichtigen wieviel RAM man zur Verfügung hat: Nextcloud Installationsanleitung - Carsten Rieger IT-Services

Das mit dem Preview habe ich noch nie verstanden. @paddl82 gehen die Werte auch dann so hoch, wenn du Bilder aufrufst, die du schon mal aufgerufen hast? Lösche dafür auch mal den Browser-Cache. Dann sollten die Previews doch existieren und die reine Bereitstellung sollte weniger PHP-Rechenzeit benötigen. Existieren die Previews? Vielleicht kann man auch an den Einstellungen für die Previews was ändern. Vielleicht liegt es auch gar nicht daran.

Naja auch wenn es “CPU- und RAM-verbrauchstechnisch” nicht viel bringen sollte, verbessert es zumindest die Benutzererfahrung, denn die Bilder, die man noch nicht angesehen hat, laden deutlich schneller, wenn die Previews bereits generiert wurden. Im besten Fall ist es also ein Win-Win, im schlechtesten Fall nur ein Win. :wink:

1 Like

Zu jedem einzelnen Bild werden mehrere Vorschaubilder, sogn. Previews, in unterschiedlicher Auflösung erstellt.

  • Es gibt die kleinen Previews für die Listenansichten
  • Etwas größer Previews für die Vorschauansichten und hier mit unterschiedlicher Größe
  • Es gibt die Previews für die Photo App und die Memories App in der Timeline
  • Es gibt die Previews beim Öffnen von einem Bild, welches angezeigt wird bis das Original geladen wird. Hier dran zu erkennen, dass Bilder beim Öffnen manchmal etwas verschwommen wirken.

…und noch ein paar mehr.

Die Standard Einstellung bei Nextcloud, ohne zusätzliche Apps, war immer, dass die Previews bei der Anforderung der Bilder erstellt werden, on the fly.
Wird ein Ordner mit Bildern geöffnet, nicht die Photo App, dann erstellt das System im Hintergrund die Previews in der Auflösung wie sie gerade gebraucht werden und nur von den Dateien/Bildern die gerade im Browser zu sehen sind plus/minus einer Toleranz. Daher kann es passieren, dass schnelles Scrollen das System lahm leg.

Die App Preview Generator kann hier sehr viel Wartezeit abnehmen. Manuell gestartet können alle Previews generiert werden. Je nach Anzahl der Dateien und der Performance vom System, kann das Stunden oder Tage dauern.
Auch hängt der Preview Generator mittlerweile mit dem Cronjob zusammen. D.h. es muss nicht zwingend manuell gestartet werden, da das System es nach und nach automatisch macht.

Aber!!!
Das System macht NICHT alles auf einmal. Es begrenzt sich immer auf eine handvoll Dateien. Bei jedem weiteren Cronjob wird wieder etwas gearbeitet. Das System soll nicht überlastet werden.

Ein weiterer Unterschied ist: Werden die Previews “erst” beim Aufruf der Dateien erstellt, sprich on the fly, dann arbeitet PHP was das System hergibt und beschränkt sich nur auf die Konfiguration von PHP.
Wieviel Prozesse dürfen gleichzeitig laufen und wieviel Speicher darf pro Prozess genutzt werden. Hier kann es “gigantische” Unterschiede geben, wenn Opcache und Memcache auf das System optimiert wurden.
Hier gilt: Eine Eierlegendewollmilchsau gibt es für Opcache und Memcache nicht. Will man hier das Optimum, muss es an das System angepasst werden.

!!! Alle Angaben ohne Gewähr !!!
PS: Meine Angaben beziehen sich auf Erfahrungen von Nextcloud VOR Version 20. Seit dem nutze ich nur noch “fertige Systeme” von Anbietern um diese Arbeiten anderen zu überlassen. Spaßeshalber und aus Neugier mal Versuche auf VPS oder RS Systemen (4,8,16 Core).

Bei einem “großen” Anbieter hat es 2 Wochen gedauert bis >10.000 Fotos flüssig liefen.
Mittlerweile habe ich auf diesem System >300.000 Dateien (incl. Fotos).

Jup. Deshalb nutzt C. Rieger folgendens Skript: https://codeberg.org/criegerde/nextcloud/raw/branch/master/skripte/phpcalc.sh

Da werden zumindest die wichtigsten Parameter abhängig vom verfügbaren RAM eingestellt.

Ich muss dazu aber sagen, dass ich kein absoluter Experte bin, wenn es um PHP und OPcache geht, aber ich kann sagen, dass meine Nextcloud mit den Settings von C. Rieger problemlos läuft, ebenfalls in einer Proxmox VM, mit 4 Cores, 8GB Ram, auf einem E3-1240v5, welcher jetzt auch nicht gerade ein Biest ist. (4 Cores / 8 Threads, Skylake Generation)

Btw. Ich hatte aber am Anfang mit meinem Proxmox Host ähnlich Probleme wie @paddl82, und die Tipps (Punkt 1 und vorallem Punkt 2) in meinem vorherigen Post haben bei mir geholfen. Meine RAM Auslastung ist momentan bei 90% und alles läuft geschmeidig…

Ich sage immer: Ungenutzter RAM ist verschwender RAM, aber mehr RAM als vorhanden geht halt dann eben auch wieder nicht, und SWAP kann die Performance brutalst in den Keller reissen.

Man vergleiche mal die SWAP Auslastung auf meinem Screenshot mit der auf den Screenshots von @paddl82. Ich bin immer noch der Überzeugung, dass hier das primäre Problem liegt. Deshalb der Tipp mit der Swappiness.

@paddl82 Falls du nicht weiterkommst mit den Tipps hier, versuche es auch im Proxmox Forum. Es hat viele kompetente Leute dort, und auch der Support Staff und sogar die Entwickler sind sehr aktiv.

Viel Glück. :slight_smile:

1 Like

Kleine Ergänzung zum Thema Swap.

Swappiness 10 oder gar 0 schaltet SWAP nicht komplett ab, aber es sorgt dafür, dass der Kernel viel später, und bei 0 wirklich nur im äussersten Notfall den Swap Speicher nutzt.

Gemäss deinen Screenshots hat der Host ja noch freies RAM und trotztdem wird SWAP genutzt. Meine Vermutung ist, dass wenn du das in den Griff kriegst, sich auch das Problem mit der “hängenden” VM erledigen wird.

Die restlichen Tipps können dann helfen die Performance deiner Nextcloud zu optimieren und gleichzeitig de RAM Bedarf so tief wie möglich zu halten. Solange dein Host aber ohne wirkliche Not den Swap Speicher nutzt, werden PHP Optimierungen auch nicht wirklich helfen, so zumindest meine Vermutung.

1 Like

…aber paddl82 wird oder sollte so langsam etwas klar werden:

Eine Nextcloud selber zu hosten kann sehr viel Arbeit bedeuten und es ist ein Thema, in das man sich nicht in 5 Minuten einlesen wird.

Kopf hoch!
Es ist noch kein ITler vom Himmel gefallen.

Hallo und danke für all die Hilfreichen Ideen und Kommentare hier.

Ich versuche mal alles zu beantworten:

Der Host hat 6 Kerne, der VM habe ich aber nur 4 zugewiesen und die sind ja Shared.

Den zugewiesenen RAM aller anderen VM/LXCs habe ich schon so gut es geht optimiert und es ist noch mehr als die hälfte frei.

Ich nutze kein ZFS und ja genau, wegen dem “geringen” RAM.

Zur Installation hatte ich das Installations-Skript von C. Rieger genutzt. Das hat auch erstmal alles soweit funktioniert.

Das Preview-Addon werde ich mal installieren. Rein vom Gefühl her, wird es aber nicht mein Problem beheben. Was ich beobachtet habe, wenn ich Bilder lade, steigt stätig die RAM-Auslastung. Sie geht aber nicht mehr runter. Das hatte ich schon mal einen Tag so stehen lassen und die RAM-Auslastung war immer noch hoch. Wenn ich dann weiter die Vorschaubilder lade, stürzt die Nextcloud ab. Der NginX zeigt mir dann “502 Bad Request” an
Nachdem die Nextcloud nicht mehr erreichbar ist, fällt die RAM-Auslastung gegen Null. Die VM ist zudem erreichbar, das habe ich vielleicht in den ersten Posts nicht richtig vermittelt.

Mit dem Thema SWAP werde ich mich mal auseinandersetzten. Performance technisch habe ich aber auch bisher keinerlei Probleme und alles andere läuft sehr geschmeidig.

Das kein Meister vom Himmel gefallen ist, ist mir klar und ich betreibe es ja auch nur als Hobby.
In Summe sind dort 3 Benutzer eingerichtet, von dem nur einer es täglich nutzt… (ich) :wink:

Gruß, paddl

Hallo paddl82.

Ein prima Statement und eine gesunde Selbsteinschätzung.
Schön, dass es zu deinen Hobbys zählt. Auch finde ich sehr gut, dass du nicht so schnell das Handtuch wirfst und wirklich sehr gut an deinem Problem arbeitest.

Das Script von xxx kenne ich nicht und habe, ehrlich gesagt, meine Installationzeilen selber erstellt.
Wie schon in einigen Zeilen vorher geschrieben, sind PHP &Co. sowie Nextcloud immer anspruchsvoller geworden. Auch gehört das Verwalten von Bildern und Videos zur “Königsklasse” der Nextcloud. Mit Imagick und Ffmpeg hast du sehr leistungsintensiven Code auf dem System. Hier heist es nun mal einfach, je mehr Leistungsreserven (Cores + RAM) dein System hat desto besser und stabiler ist es zu betreiben. Wenn dann noch ein NVMe Raid dahinter steht - Noch besser.

Kleines Beispiel:
Seit einiger Zeit nutze ich eine nicht selbst gehostete Nextcloud von Hetzner. Diese bietet keine Unterstützung von Ffmpeg, also keine Vorschaubilder von Videos und kein Streaming. Der Rest funktioniert sehr gut. Welche Hardware dahinter steckt kann ich nicht sagen. Die Leistung würde aber gefühlt >8Core und >8GB RAM entsprechen. Bei Synchronisationen (z.B. rclone) liegen die Datendurchsätze immer >50MByte/sec.

Da ich auch gerne experimentiere und mich Hub 6 und 7 mal wieder interessiert hat, habe ich mir dazu vServer angemietet. Netcup hat hier neue ARM64 im Angebot und mit 6vCore + 8GB RAM ein guter Anfang.
Nach vielen Versuchen mit Imagick und FFMPEG war ich von der Leistung sehr enttäuscht. Erst ein neues System mit 12vCore + 24GB RAM fängt an Laune zu machen. Hier laufen Imagick und FFMPEG sehr gut. Beide mit etwas Einschränkungen, da sie noch überwiegend auf x86 ausgelegt sind.
Die Nextcloud & Co. läuft direkt auf dem System und nicht unter Docker.

Aber letztendlich ist die Systemleistung auch eine Gefühlssache. Das System bei Hetzner nutze ich schon länger. Es ist technisch und von der Version her nicht “das Neuste”, aber es läuft sehr sehr stabil und scheint viele Systemresourcen zu haben (welche natürlich mit anderen geteilt werden müssen).

Meine Systeme bei Netcup sind Spielerei und das kann man sich ja jeden Monat überlegen, ob man das weiter machen will.

Schönes bastelreiches Wochenende
Gruß
Helmut

EDIT:
Etwas möchte ich auch nicht vorenthalten. FFMPEG (auch Imagick) arbeitet sehr gut mit NVIDIA CUDAs zusammen und wird hier richtig zur “Rennsau”.
Hatte mal die Möglichkeit einen vServer mit 2xP4000 zu testen. Der Performance Sprung ist verblüffend. 8k Fotos werden “on the fly” hyperschnell erzeugt und angezeigt. 4k Videos sehr gut live gestreamt.
Dank 5G und Glasfaser könne man neben dem Server sitzen :slight_smile:

Ich habe vorher in meiner VM (4 Cores / 8GB mit vorgenerierten Previews) einige große Bilderordner durchgeschaut und egal ob ich das in der Files App oder in der Photos App gemacht habe, die RAM-Last in der VM hat sich kaum verändert und auch die CPU-Last ist niedrig geblieben. Die vorgenerierten Previews bringen diesbezüglich also definitiv etwas.

Aber ja, ich denke auch nicht, dass das eigentliche Problem, nämlich dass der Arbeitsspeicher überläuft und die Nextcloud dann nicht mehr erreichbar ist, durch das Vorgenerieren der Previews gelöst wird. Es wird dann aber wohl deutlich seltener vorkommen.