Linux-Kernel Swap-Management (Relikte aufsammeln)

OK, du machst Virus Scan. Dadurch ändert sich buff/cache vom System.

An sich so was, wenn überhaupt notwendig, mal in einer VM laufen lassen. Die VM automatisch hochfahren, Scan laufen lassen und dann die VM beenden.

An sich hat du meiner Meinung nach ein falsches Konzept und versuchst es dann "irgendwie" zu reparieren.
Ergänzung ()

Zum Thema ClamAV und RAM-Verbrauch findet man einiges, wenn man danach googelt. z.B.
 
oicfar schrieb:
An sich so was, wenn überhaupt notwendig, mal in einer VM laufen lassen. Die VM automatisch hochfahren, Scan laufen lassen und dann die VM beenden.
Das ändert an den Speicheranforderungen wenig.
 
Jut, bei solchen Sachen wie auch bei dem Debian List Thema geht's prinzipiell um ein Problem, welches man versucht zu lösen. Und für ein Problem gibt es oft mehrere Lösungen. Diese kann man in die Runde werfen.

Du möchtest hier den anderen Weg gehen. Viel Glück dabei. Ich konnte mich in den letzten ~40 Minuten on ClaimAV und RAM ein wenig einlesen und fand die diversen Beiträge interessant. Selbst nutze ich es nicht und habe auch nicht vor.

Ich bleibe dabei, was ich unter #7 geschrieben habe. Dein Ansatz wird dir keinen Vorteil bringen, wenn du den SWAP wieder zurück setzen wirst.

Viel glück bei der Lösung deines Problems.
 
Ich denke, das Problem wurde nun hinreichend beschrieben, und Lösungsansätze gibt es auch (swappiness ändern z. B. (obwohl das keine Garantien gibt) oder den Swap zwischenzeitlich deaktivieren)... Insofern verstehe ich den vorhergehenden Beitrag nicht ganz, außer, dass er die Beitragszahl erhöht.
 
Lösungsansätze würde ja implizieren dass es ein Problem gibt... das scheint mir aber nicht der Fall zu sein? Für mich fällt das unter Schönheitsoperation weil die einzige Motivation ist dass du nicht willst das bei Swap ne Zahl größer als 0M steht.

Die Daten die clamscan von der Disk liest gehen durch den VFS Cache. Der Cache konkurriert mit den Prozessen um den RAM. Mit swappiness und vfs_cache_pressure kann man tunen ob Linux eher dateien aus dem cache schmeißen oder prozesse swappen soll. Man kann die Balance jetzt in die eine oder andere Richtung verschieben aber funktionieren tut es ohnehin.

Nur was überhaupt kein Sinn macht ist es Speicherseiten die gar nicht benutzt werden wieder in den RAM zu laden obwohl sie nächste Nacht wieder auf die SSD geswapped werden müssen und dabei immer und immer wieder Schreibzugriffe verursachen und die SSD abnutzen.

Swap ist imo immer ne Notlösung für Außnahmesituationen mit hohem Speicherbedarf. Sinnig ist es nur dem System genug RAM für alle seine tagtäglichen Vorgänge zu geben.
 
  • Gefällt mir
Reaktionen: nutrix
Nein, innerhalb von 23:59:59 Stunden lang (von mir aus auch nur 23:59:55 Stunden ...) den Swap nicht zurückzuholen ist eine Ausnahmesituation und falsch, meiner Ansicht nach (sozusagen ein Pivot oder Peak). Hier wäre ein manuelles Eingreifen in das Swap-Management sinnvoll, das nicht so vorausschauend sein kann, da es auch auf Annahmen beruht.

Wenn ClamAV nicht ausgeführt werden würde, dann würde der Cache/Swap ja auch nicht verwendet werden.

Und falls zwischendurch gerebootet werden muss, entstehen ohnehin Lese- und Schreibzugriffe.
 
Marco01_809 schrieb:
Swap ist imo immer ne Notlösung für Außnahmesituationen mit hohem Speicherbedarf.
Nein, ist es nicht. Mit steigender Uptime werden auch mehr Prozesse gecached. Und dafür wird auch der Swap verwendet. Das ist eine ganz normale Strategie.

Eine Ausnahmesituation liegt dann vor, wenn beim Starten eines Programmes auf einmal der kswapd anfängt, den Speicher immer zwischen RAM und Swap hin- und herzuschaufeln. Dann hat entweder der Programm einen Memory Leak, oder der RAM ist zu wenig.

Hier in dem Fall mit Clam-AV:
https://stackoverflow.com/questions...not-to-swap-out-a-particular-processes-memory

Die erste Antwort mit mlockall wird Dir wenig bringen. Dazu müsstest du einen Wrapper in C schreiben, der halt dann Clam-AV starten, wobei das nicht auf Child-Prozesse vererbt wird.

Aussichtsreicher könnte es sein, wenn du Clam-AV in eine eigene CGroup packst (nächste Antwort).
https://unix.stackexchange.com/questions/10214/how-to-set-per-process-swapiness-for-linux#10227
https://unix.stackexchange.com/ques...ff-swapping-for-only-one-process-with-cgroups

Einen Prozess kannst du in einer CGroup starten (Redhat-Doku):
Code:
cgexec -g cpu:group1 firefox http://www.redhat.com
cgexec -g subsystems:path_to_cgroup command arguments

Lesestoff für Cgroup-Swapiness:
https://unix.stackexchange.com/ques...ement-of-memory-swappiness-file-in-cgroups-v2
vm.force_cgroup_v2_swappiness

Das Ganze kannst du in eine Systemd-Unit packen, z.B. clam-av@.service, bei dem du dann sogar die Cgroup als Variable übergeben kannst. (z.B. systemctl start clam-av@noswap mit CGroup noswap)

Viel Spaß beim Forschen!
 
Nein, [...] den Swap nicht zurückzuholen ist [...] falsch
WARUM denn? Wenn Daten für 24h im Swap liegen bleiben ist das der Beweis dass auf diese Daten kein einziges mal zugriffen wurde. Also macht es keinen Unterschied ob sie im Swap, im RAM oder auf dem Mond sind. Bei schon einem einzigen Zugriff auf eine geswappte Seite MUSS Linux die Seite in den RAM zurückholen ("Seitenfehler" bzw "page fault"). Das geht mit der Architektur unserer Computer gar nicht anders.

Linux macht kein swap reclaiming auf Verdacht weil das eben einfach Schwachsinn ist. Wenn die Seiten eh schon geswapped sind ist es für die Performance viel besser den freien RAM für den VFS Cache zu benutzen als ihn mit Seiten zu füllen die gar nicht benutzt werden! Größerer VFS Cache spart Disk Zugriffe. Swap reclaiming verursacht Disk Zugriffe obwohl man gar nicht weiß ob die Daten gebraucht werden.

Das memory management von Linux hat sich nicht mal jemand eben so an einem verregneten Dienstnachmittag ausgedacht. Das wird seit über 40 Jahren auf allen unixoiden so gemacht. Die Strategie von Linux minimiert Disk Zugriffe um die Leistung des Systems zu erhalten. So gut es eben geht. Das man überhaupt Swap braucht ist natürlich immer schlechter als genug RAM zu haben. Logisch, RAM ist immer noch viel schneller als die schnellste SSD. Aber Linux wurde über 3 Jahrzehnte optimiert um in einer Situation mit zu wenig RAM die bestmögliche Leistung zu erhalten.

Hier wäre ein manuelles Eingreifen in das Swap-Management sinnvoll
Sinnvoll WOFÜR? Was ist der Vorteil davon?

Wenn du keinen Swap willst dann mach den Swap aus und gib dem System genug RAM.

Pummeluff schrieb:
Nein, ist es nicht. Mit steigender Uptime werden auch mehr Prozesse gecached. Und dafür wird auch der Swap verwendet. Das ist eine ganz normale Strategie.
Darauf wollte ich mit dem VFS Cache in meinem letzten und diesem Post etwas eingehen. Langfristig ist es sinnvoll mehr vom RAM als Cache nutzen zu können als ungenutzte Seiten von Prozessen drin zu haben.
Dafür benutze ich heutzutage aber nur noch zram (mit sehr hoher swappiness), swapping auf disks halte ich für eine Notsituation. Halte aber die 4GB RAM vom OP für zu wenig für zram.
 
  • Gefällt mir
Reaktionen: nutrix, SuperCube und Krik
Marco01_809 schrieb:
Halte aber die 4GB RAM vom OP für zu wenig für zram.
Auf der offiziellen Seite steht das.

Recommended System Requirements

The following minimum recommended system requirements are for using ClamScan or ClamD applications with the standard ClamAV signature database provided by Cisco.

Minimum recommended RAM for ClamAV:
  • FreeBSD and Linux server edition: 3 GiB+
  • Linux non-server edition: 3 GiB+
  • Windows 7 & 10 32-bit: 3 GiB+
  • Windows 7 & 10 64-bit: 3 GiB+
  • macOS: 3 GiB+
D.h. unpassende Hardware für das was insgesamt darauf läuft.

Wenn was geswappt wird, was nichts schlimmes ist und man keine Probleme hat -> ignorieren.

Hat man ein Problem mit dem Swapping, dann Hardware mit deutlich mehr RAM hinstellen und SWAP ausschalten.

Mein Mini-Server auf #7 hat 32GB RAM und 6 GB Swap. die größte Anwendung, die darauf läuft ist PostgreSQL (~6GB groß) und ich habe dem Prozess schon viel RAM zugewiesen. Nach 1-2 Tagen ist SWAP zu 10-20% gefüllt und wächst dann langsam. Und ich habe keine Performance Probleme.
Ergänzung ()

Und wenn ich die Tage 1-2h Zeit übrig habe, setze ich bei mir eine VM mit 4GB RAM (mit/ohne swap) auf und schaue es mir genauen an, wie viel RAM da wirklich benötigt wird und wie das Verhalten sein wird.
 
  • Gefällt mir
Reaktionen: CyborgBeta
Habe Ubuntu 24.0.4.1 Server in einer VM unter Proxmox aufgesetzt. Und dann ClamAV 1.0.7 LTS installiert. Ansonsten keine weiteren Tools. Ich will ClainAV auch nicht in einer VM bei mir aufsetzen, wo ich einige Tools am Laufen habe. Habe der VM 2 Cores, 4 GB RAM und 2 GB Swap gegeben. Ich habe es mehrfach laufen lassen und dabei verschiedene Dateien zum Testen hinzugefügt. Ich wollte hier keine NFS Freigabe mounten.

Beim Scan:
1728583385535.png

Hier schwankt die RAM-Nutzung.

Halt durch das Lesen steigt buff/cache:
1728583420308.png


Nach dem Lauf sah es so
1728583307843.png

aus.

ClamAV lief ohne Probleme in einer VM mit 2GB RAM und 2GB Swap.

Zur Laufzeit:
1728584086465.png

1728584123089.png

1728584199707.png

1728584298993.png


Hals alles, was geht, kommt in den Swap:
Code:
$ ./swap_usage.sh
................................................
Overall swap used: 3460146 kB
========================================
kB      pid     name
========================================
2691824 709     clamd
629664  1801    clamscan
20448   681     networkd-dispat
18920   723     unattended-upgr
5712    364     systemd-udevd
4344    596     systemd-resolve
4256    690     udisksd
4160    737     ModemManager
3616    1058    bash
3608    1138    bash
3600    1265    bash
3440    855     (sd-pam)
3264    854     systemd
3160    1       systemd
2987    1474    sshd
2987    1344    sshd
2987    1214    sshd
2987    1056    sshd
2800    719     rsyslogd
2568    1137    sshd
2543    1057    sshd
2450    1264    sshd
2442    1397    sshd
2435    847     sshd
2426    1216    sshd
2424    1089    sshd
2416    849     sshd
2416    1348    sshd
2416    1218    sshd
2416    1091    sshd
2384    1398    bash
2314    1346    sshd
2152    578     systemd-network
1664    689     systemd-logind
1660    300     systemd-journal
1648    601     systemd-timesyn
1408    845     sshd
1296    682     polkitd
808     1510    htop
752     676     dbus-daemon
416     683     qemu-ga
360     1553    watch
296     808     cron
296     1475    sftp-server
264     817     agetty
240     1215    sftp-server
240     1088    sftp-server
232     1345    sftp-server

-> keine Ahnung, ob in dem Fall irgendwann der OOM-Killer sich meldet. ;)

Nach dem Scan:
1728584408775.png


An sich normales Verhalten vom Linux Kernet. Wenn einem die SWAP Nutzung stört, dann sollte man sich ein wenig mit Linux Kernel beschäftigen
und verstehen, wieso es gemacht wird. Wurde schon darauf hingewiesen.

Ich sehe aber nicht, dass bei mir claimscan sich ~4 GB RAM nimmt. Die größte Dateien waren ~500MB groß.

Ja, ClamAV muss auf einer Hardware laufen, die 4+ GB RAM hat. bedeutet aber auf der anderen Seite, dass die anderen Tools, die darauf laufen, Platz machen müssen. Ist erstmal nicht schlimm. Ansonsten müsste man ein wenig Zeit reinstecken, um hier ein wenig was zu optimieren. Aber das würde ich nur machen, wenn ich merkliche Probleme habe nachdem ClamAV gelaufen ist.

Optional könnte man schauen, wie sich die RAM Nutzung mit Docker-ClamAV (https://docs.clamav.net/manual/Installing/Docker.html) verhält. Halt Docker-ClamAV Scan starten und am Ende beendet sich der Container.
Ergänzung ()

Ansonsten würde ich in so einem Fall, dass Swap stark belegt ist mal
Code:
sudo vmstat -w 1
laufen lassen. In den Spalte swap (si/so) kann man sehen, ob und wie stark der Swap im Betrieb genutzt wird.
 
Zuletzt bearbeitet:
  • Gefällt mir
Reaktionen: Marco01_809, nutrix, JumpingCat und 2 andere
@oicfar Danke.

Vielleicht hab ich mich vorher nicht eindeutig ausgedrückt ...

Es stehen 4GB RAM und 4GB Swap auf dem Server insgesamt zur Verfügung. Jedoch sind 2GB RAM schon vor und während der Scan-Ausführung durch Docker-Container belegt. Deshalb wird dann der Swap so stark beansprucht.

Bei Swappiness 60 und erneuter Ausführung von clamscan -r <...> (der Swap ist also schon belegt):

1728587397038.gif
 
CyborgBeta schrieb:
@oicfar Danke.

Vielleicht hab ich mich vorher nicht eindeutig ausgedrückt ...
Du hast dich schon korrekt ausgedrückt. Ich hab's falsch geschrieben.

Wenn der Scan vorbei ist und du was an dem System machst, lass mal daneben in der Console sudo vmstat -w 1 laufen lassen. Und beochte hin und wieder swasp (si/so). Wenn na vorwiegend 0 zu sehen sein sollte, dann passt alles. wenn aber häufig > 0 steht (dazu noch höhere Werte), dann wird aus dem Swap gelesen oder geschrieben.
 
  • Gefällt mir
Reaktionen: JumpingCat
@oicfar : Gute Erklärung. Der wichtige Parameter ist swap in und swap out zu betrachten. Solange die beiden bei Null bleiben ist alles ok. Die kann man auch mit ins Monitoring nehmen. Früher war das alles schlimmer, da hatte man nur eine lahme IDE Platte. Heute sind das entweder SSD oder sogar RAID. Da hat keine spürbare Verzögerung mehr.

Idee:
Pack einfach mehr RAM rein und gut ist. Ich habe das früher auch gemacht, optimieren wo es geht. Aber wenn das Problem mit mehr RAM sehr günstig zu lösen ist, dann mache es so.

Hint: Mehr RAM wird dein Problem nicht lösen. Wenn ich bei mir so schaue:
Code:
user@host:~$ w
 21:19:44 up 20 days,  3:01,  6 users,  load average: 0.12, 0.11, 0.15
[...]
user@host:~$ free -m
               total        used        free      shared  buff/cache   available
Mem:           63891       27844        3534         544       33942       36046
Swap:           8191        4510        3681

Aktiv eingreifen oder einfach ignorieren? :-)
 
  • Gefällt mir
Reaktionen: CyborgBeta und oicfar
Anbei noch das Skript (nicht von mir) mit dem man sehen kann, was im Swap ausgelagert wurde. Bitte das Skript nach .sh umbenennen und dann mit sudo ./swap_usage.sh ausführen. Zuvor aber noch chmod 755 swap_usage.sh .
Ergänzung ()

CyborgBeta schrieb:
Es stehen 4GB RAM ...
Welche Hardware hast du da genau im Einsatz? Sind die 4 GB fest verbaut oder kann man es tauschen?
 

Anhänge

oicfar schrieb:
Welche Hardware hast du da genau im Einsatz? Sind die 4 GB fest verbaut oder kann man es tauschen?
Ist ein Server bei Hetzner, kann ich dir gar nicht genau sagen. Aber 8 GB RAM wäre die nächste Preisstufe. ;)
 
CyborgBeta schrieb:
Ist ein Server bei Hetzner, kann ich dir gar nicht genau sagen. Aber 8 GB RAM wäre die nächste Preisstufe. ;)
Die Alternative wäre dann eben den Docker-Container zu stoppen, so daß mehr RAM zur Verfügung steht.

Wie einige hier richtig sagen, wenns swappt, mehr RAM dazu.
 
  • Gefällt mir
Reaktionen: CyborgBeta
CyborgBeta schrieb:
Ne ne, der Prozess, der kurz einmal pro Tag läuft, braucht ungefähr 2gb RAM. Da ungefähr 2gb schon vom System und anderen Prozessen belegt sind, wird der Swap aktiv ... und irgendwie bleiben dann 23,9 Stunden lang (ungefähr) Swap-Reste übrig. Das ist doch nicht sinnvoll?
Doch, das ist extrem sinnvoll weil RAM was lange nicht angefasst wird nicht den schnellen Teil vom virtuellen Speicher belegt und der schnelle Teil besser genutzt werden kann.

Lasst mal "sar -SWr 5" laufen wenn dieser Prozess läuft.
Ergänzung ()

nutrix schrieb:
Wie einige hier richtig sagen, wenns swappt, mehr RAM dazu.
It depends.
Ergänzung ()

oicfar schrieb:
@CyborgBeta dein aktuelles Setup macht das ganze Linux Caching unbrauchbar. So ein Aufbau des Cachings kann schon 1-2 Tage dauern. Und wenn dein Prozess jeden Tag den ganzen RAM und auch SWAP sich nimmt, dann würde ich überlegen mal mehr RAM einzubauen. Und wenn das nicht geht, entweder andres System oder sich eine andere Lösung überlegen.
Völliger Unsinn.
Ergänzung ()

CyborgBeta schrieb:
sudo sysctl vm.swappiness=100 bewirkt, dass aggressiv geswappt wird (also der Swap verwendet wird)

und sudo sysctl vm.swappiness=1 bewirkt, dass der Swap möglichst gar nicht genutzt wird.

Das Setzen auf 1, bevor der Prozess gestartet wird, könnte also sinnvoll sein. Kurze Zeit später kann der Wert wieder auf 60 gesetzt werden.
Nein, weil es Situationen geben kann wo schneller Speicher benötigt wird als durch swappen bereitgestellt wird, vereinfacht gesagt.
swappiness < 5 sollte man vermeiden.
Ergänzung ()

CyborgBeta schrieb:
Das Problem ist, dass das System denkt, dass clamscan in absehbarer Zeit wieder ausgeführt wird, und so den anderen Prozessen den Swap "aufzwingt". Was aber natürlich ein Irrtum ist.
clamscan hat in dem Moment eben den "heißen Speicher".
Ergänzung ()

oicfar schrieb:
OK, du machst Virus Scan. Dadurch ändert sich buff/cache vom System.

An sich so was, wenn überhaupt notwendig, mal in einer VM laufen lassen. Die VM automatisch hochfahren, Scan laufen lassen und dann die VM beenden.
Auf einer Kiste mit 4GB Ram, sehr merkwürdiger Ansatz.
 
Zuletzt bearbeitet:
  • Gefällt mir
Reaktionen: CyborgBeta
foofoobar schrieb:
Völliger Unsinn.
Begründung?

Ich habe es in meinem Kommentar nicht im Detail geschrieben, was ich genau meine. Das Problem, was ich da sehe ist, dass clamav in diesem Fall 1x am Tag läuft und prüft neue Dateien. D.h., dass was nach dem Lauf in buff/cache (sieht man bei free) nach dem Lauf steht, wird dann eher nicht wieder genutzt werden. Also macht man sich mit dem einen Lauf am Tag den buff/cache "kaputt". Ich weiß auch nicht, was alles auf dem Server noch läuft. Ich gehe aber davon aus, dass es da keine Performance-Probleme gibt.

Hier
1728590626059.png

ein Auszug aus meinem Mini-Server (4 Cores, 32GB RAM, 6GB Swap). Man sieht, dass nur 1,7GB RAM in Nutzung sind. Aber fast 29GB ist buff/cache. Und das was drauf läuft, läuft flüssig.
 
CyborgBeta schrieb:
Ich denke, das Problem wurde nun hinreichend beschrieben, und Lösungsansätze gibt es auch (swappiness ändern z. B. (obwohl das keine Garantien gibt) oder den Swap zwischenzeitlich deaktivieren)... Insofern verstehe ich den vorhergehenden Beitrag nicht ganz, außer, dass er die Beitragszahl erhöht.
Wenn man den swap deaktiviert und Speicheranforderungen bestehen werden u.a. Pages aus dem Text-segment laufender Prozess rausgeworfen, denn die können ja jederzeit wieder von der Platte geholt werden.

Text und Daten von laufenden Prozessen werden schlicht per mmap(2) "geladen".
 
foofoobar schrieb:
Auf einer Kiste mit 4GB Ram, sehr merkwürdiger Ansatz.
Nicht schon wieder. Natürlich keine VM in der Umgebung mit 4GB RAM starten.
 
Zurück
Oben