[technique] Avis sur analyse de graphe performance serveur

Ludovic Pouzenc ludovic at pouzenc.fr
Dim 16 Oct 20:56:48 CEST 2022


Bonsoir,

Pour moi swapiness 60 et tous les paramètres kernel par défaut, sauf 
appli qui abuse, normalement ça marche bien, en tout cas pour moi avec 
~100 VM debian. Appli qui abuse : en général écrite en java :o)

Les 3 courbes roses dans le graphe memory n'aide pas pour une analyse. 
Au pire : apt install munin pour quelques temps. Il fait des graphes 
moche *mais* réellement utilisables. Merci rrdtool et la config par 
défaut qui va bien depuis l'an 2000-quelque chose petit. 100% des 
graphes memory que je vois hors munin tous tous archi nuls :-/

Ça serai intéressant de regarder au fil de la journée quels programmes 
mangent de la RAM. atop (avec atopsar je crois me souvenir) permet de 
voir l'équivalent d'un "top" et de remonter dans le temps avec les 
flèches du clavier, dans une vue ncurses avec la liste des process, y 
compris ceux qui n'ont vécu que moins de 5 minutes. (ça m'a déjà sauvé 
pour comprendre que le pb venait d'une cron qui faisait un maxi pic 
d'alloc VM pendant 1 seconde puis exit sur une VM à des heures pas 
systématiques à cause d'une appli ayant installé un */5 * * * * * cron.php).

J'ai passé 10 ans avec pas de swap du tout dans les VM, et dans la 
dernière univ où je suis, j'ai un modèle de VM debian 11 avec un petit 
swap (200Mo) qui est une partition au début de mes VM (pour pas coincer 
les jours d'agrandissement de la partition racine en fin de disque et 
enbonus, ptet elle deviendra une partition EFI un jour), car dans 
certains cas pas hyper clair, notamment avec des tomcat, le no swap ça 
fait un peu trop facilement des OOMkiller kernel (et l'infra en question 
n'a pas des téra de RAM en rab').

Ce qui suit n'est vraisemblablement pas ton cas de figure car on voit le 
cache (supposément, rose du bas) baisser dans la journée, c'était pas 
mon cas.

Dans les noyaux 5.x à partir de je ne sais pas vraiment quelle version, 
avec les cgroups v2 et des changements dans linux, il semble qu'il 
arrive que linux préfère swapper des pages plutôt que jeter des pages en 
cache RAM. Plein de documents, y compris récents, expliquent que ça 
n'existe pas. Et ça semble vrai aussi. Pas clair pour moi. En pratique, 
j'ai eu un même problème sur 5 VM sur 45 issue du même modèle debian 
11), les plus sollicitées par des usagers. Au bout 'un semaine ou deux 
d'uptime, >80% swap occupé, cache RAM pas vide du tout (et plus gros que 
le swap!) et pas de process connu qui fasse un gros spike avec un 
malloc(beaucoup) puis free() peu après.

Pour voir ce qui est dans le cache des MV bizares, j'ai utilisé (en 
root) des variantes (attention si vous avez plusieurs partitions montées 
, faut les lister) de :

# find / -mount -type f -size +1M -print0 | xargs -r0 fincore | sort -rh 
| head -n100

J'ai constaté que j'avais un cache plein de fichiers qui ne seront juste 
très probablement jamais lus. Des logs rotatés, des 
/var/lib/automysqlbackup/*/*.gz, des /var/log/journal/* vieux. Et par 
contre, les 3/4 des fichiers du /var/lib/mysql qui est important sur ma 
VM... pas dans le cache. B*del.

fincore c'est excellent pour commencer, mais ça ne dit pas qui a fait 
rentrer lesdits fichiers dans le cache. Ni comment sortir un fichier du 
cache. J'ai pas trop cherché de solution sur étagère pour ça (j'ai lu 2 
stackoverflow longs, ça m'a gavé, j'ai apt search des trucs, rien, j'ai 
fermé firefox et ouvert vim). J'ai écrit un dontneed.c en 30 lignes qui 
appelle fadvise(..., DONTNEED...) pour tous les fichiers qui lui sont 
passés en argument (pas trouvé tout fait ça dans debian !). J'ai 
manuellement dégagé les trucs "débiles" du cache des VM qui déconnaient. 
J'ai swapoff -a && swapon -a aussi. Le lendemain, ils étaient re-là les 
fichiers nuls dans le cache. Et le swap avait augmenté, grr...

Conclusion de l'aventure : j'ai dû emballer l'agent de backup TINA 
(choix indépendant de ma volonté sinon... bref :D) dans une unité 
systemd avec un MaxMemory=256M. Il ne consomme jamais bcp de RAM (en 
terme de malloc() ), mais lorsqu'il fread() un gros tas des fichiers de 
ma VM en séquence pour les envoyer au serveur de backup il oublie 
d'appeler fadvise(...DONTNEED...). Avec cette unité systemd, il arrête 
"d'empoisonner" le cache tous les soirs avec des fichiers "à la con". 
Après ça, le swap-in dans mes VM qui avaient le pb est revenu à presque 
0. J'ai ajouté un post hook à mon automysqlbackup (qui lui non plus ne 
fait pas des fadvise) pour appeler mon ./dontneed avec tous les fichiers 
sql.gz produits). (oui j'avais des VM avec des gros dump à cause d'un 
bon gars qui a cru que SQL BLOB est une idée ok pour stockage de 
fichiers :D)

Plus de problèmes. Les VM en question arrivent parfois à reswapper un 
peu, par fois 180Mo en 3 ou 4 semaines. Mais comme j'ai 
unattended-upgrade actif et qu'il y a des secu update de kernel ou qui 
demandent un reboot a peu près à cette fréquence là... reboot et swap 
vide donc.

Ce même agent TINA qui fait pas de fadvise dans un debian 10, sur une VM 
avec même appli et même trafic (notamment l'intranet de la fac qui était 
en deb10 avant réinstall en deb11) avec un kernel 4.x et les cgroups v1, 
a certainement un listing de cache tout nul mais jamais ça ne conduit à 
avoir un swap plein. C'est un truc "nouveau" pour moi ces "problèmes" 
(sous-optimalités diront d'autres).

Ludo

Le 15/10/2022 à 20:31, Marc_marc via technique a écrit :
> Bonjour,
>
> Le 15.10.22 à 12:07, Matthieu Herrb via technique a écrit :
>> S'il s'agit d'une machine virtuelle, il vaut mieux ne pas configurer 
>> de swap du tout ou alors forcer swapiness à 0.
>
> il me semblait avoir lu (mais je ne retrouve pas la source)
> que swapiness=0 n'avait pas l'effet attendu sur tous les noyeau
> et perso j'utilise swapiness=1 qui a en pratique le même effet.
>
> Cordialement,
> Marc
>
>
> _______________________________________________
> technique mailing list
> technique at lists.tetaneutral.net
> http://lists.tetaneutral.net/listinfo/technique

-- 
Ludovic Pouzenc
www.pouzenc.fr



Plus d'informations sur la liste de diffusion technique