Puncte:4

De ce serverul Ubuntu 20.04 cu vm.swappiness = 0 încă schimbă unde există o mulțime de memorie liberă?

drapel cn

fundal

Rulem mai multe servere KVM pe Ubuntu 16.04 și am început să testăm upgrade-ul la 20.04. Ceea ce am descoperit este că, deși nu am văzut niciodată vreo utilizare de swap pe serverele noastre 16.04, după câteva zile, un server 20.04 va afișa câteva sute de MB de utilizare de swap. Nu este o problemă mare, deoarece vmstat arată foarte puțină activitate de schimb, iar graficele munin confirmă că schimbul de intrare/ieșire este nesemnificativ, dar vrem totuși să înțelegem comportamentul.

Până acum am folosit Nagios pentru a monitoriza utilizarea schimburilor și pentru a alerta dacă este găsit. Sistemul care a fost actualizat din 16.04 până în 20.04 rulează cinci VM-uri cu încărcare ușoară. Sistemul gazdă arată că a folosit meme în jur de 29 G din aproximativ 200 GB memorie totală. Fără vârfuri sau ceva care să determine utilizarea mem-ului să ajungă atât de mare. Utilizarea memoriei VM este restricționată și nu există alte procese care necesită memorie care rulează pe serverul KVM în sine.

root@kvm-xx:~# free -m
              total folosit gratuit partajat buff/cache disponibil
Mem: 193336 29495 768 5 163072 162404
Schimb: 6675 240 6435

Sus, exemplu de schimbare a proceselor:

    PID VIRT RES SHR S %MEM COMMAND SWAP 
   6447 18,2g 15,8g 22908 S 8,4 qemu-system-x86 239352 
   6160 2661052 1,9g 21880 S 1,0 qemu-system-x86 90788 
   6315 2129436 644388 21856 S 0,3 qemu-system-x86 29724 
   6391 10,4g 7,9g 22832 S 4,2 qemu-system-x86 24028 
   6197 6505584 3,0g 23008 S 1,6 qemu-system-x86 10972 
   5686 9908 2944 2720 S 0,0 cron 60
   5805 24404 14440 4388 S 0,0 munin-nodul 4 

Ieșire tipică de la vmstat, care nu afișează nicio modificare în schimbarea intrare/ieșire.

root@kvm-xx:~# vmstat 2 10
procs -----------memorie---------- ---swap-- -----io---- -system-- ------cpu -----
 r b swpd free buff cache si so bi bo in cs us sy id wa st
 0 0 407620 869916 214784 165081536 0 0 270 12 5 2 0 2 98 0 0
 2 0 407620 869900 214784 165081536 0 0 0 28 8533 24140 0 2 98 0 0
 1 0 407620 869836 214784 165081536 0 0 0 28 8642 24682 0 2 98 0 0

Acest sistem a funcționat timp de un an cu 0 swap pe 16.04 cu aceleași VM-uri și încărcare.

Ce a fost încercat și testat

După actualizare, s-a constatat că numad nu a fost instalat și că VM-urile nu au fost fixate pe vcpu-uri pe același procesor fizic. Adică utilizarea memoriei pe nodurile numa. Numad instalat și fixare verificată. Cred că utilizarea de schimb a fost mai mare inainte de această schimbare, dar nu pot spune cu certitudine.

Mă așteptam ca acest comportament să fie legat de kernel, așa că a fost actualizat de la 5.4 la kernel-ul HWE 5.11. Același comportament atât pe 5.4, cât și pe 5.11.

Am încercat să dezactivăm KSM (Kernel samepage mergeing), deoarece nu avem nevoie de el și să-l eliminăm ca posibilă sursă de utilizare a schimburilor.

Am încercat să dezactivez complet schimbul pentru a vedea dacă a existat o înfometare reală a memoriei în care Ucigașul OOM va veni la petrecere. Acest lucru nu s-a întâmplat, așa că mi se pare că schimbul nu este necesar, dar este încă folosit dintr-un anumit motiv.

Idei și gânduri

Cred că din anumite motive, nucleul decide să schimbe paginile inactive pentru a le schimba, chiar și cu swappiness = 0. Acesta este probabil un comportament care s-a schimbat cu noile nuclee livrate cu 20.04.

În mod ideal, ne-am dori ca nucleul să schimbe doar în ultimă instanță, ca comportament anterior, și să folosim monitorizarea utilizării swap pentru a detecta utilizarea swap-ului și a declanșa o alarmă Nagios.

Am citit mai multe fire pe subiecte similare, dar am găsit informații contradictorii despre care ar putea fi explicația.

Ceea ce vreau cu adevărat să evit este o situație în care facem upgrade la unele dintre serverele noastre 16.04 mai grele încărcate la 20.04 și vedem că această problemă escaladează într-o problemă reală în producție.

Sunt conștient de swapoff / swapon la mutarea manuală a memoriei din swap, dar întrebarea este de ce se schimbă în primul rând.

Dacă cineva are o perspectivă în acest sens, ar fi foarte apreciat.

Mulțumiri!

Raffa avatar
drapel jp
Răspunde asta la întrebarea ta? [Cum se mută automat schimbul înapoi în RAM?](https://askubuntu.com/questions/1347219/how-to-auto-move-swap-back-to-ram)
vanadium avatar
drapel cn
@Raffa aceasta nu este întrebarea aici, deci cu siguranță nu este un duplicat. @Stian, vă rugăm să verificați `cat /proc/sys/vm/swappiness` rapoarte 0, deoarece ceea ce descrieți este foarte neașteptat, cu excepția cazului în care ar fi fost o încărcare mare a memoriei la un moment dat de la ultima repornire.
Stian avatar
drapel cn
Da, schimbul este într-adevăr zero. De asemenea, mi se pare foarte neașteptat și nu am văzut niciodată acest comportament pe Ubuntu 16.04 kernel 4.4. root@kvm-xx:~# cat /proc/sys/vm/swappiness 0
Stian avatar
drapel cn
Am adăugat rezultate de sus, arătând ce procese folosesc memoria de schimb. Mai ales qemu, dar apar și alte procese aleatorii. În acest caz, cron și munin-node.

Postează un răspuns

Majoritatea oamenilor nu înțeleg că a pune multe întrebări deblochează învățarea și îmbunătățește legătura interpersonală. În studiile lui Alison, de exemplu, deși oamenii își puteau aminti cu exactitate câte întrebări au fost puse în conversațiile lor, ei nu au intuit legătura dintre întrebări și apreciere. În patru studii, în care participanții au fost implicați în conversații ei înșiși sau au citit transcrieri ale conversațiilor altora, oamenii au avut tendința să nu realizeze că întrebarea ar influența – sau ar fi influențat – nivelul de prietenie dintre conversatori.