[qemu/apache] CPU & FIN_WAIT2

Applications, problèmes de configuration réseau
Fanch
archer
Messages : 144
Inscription : lun. 01 déc. 2008, 21:16

[qemu/apache] CPU & FIN_WAIT2

Message par Fanch »

Bonjour,

Je sèche un peu, j'ai besoins de votre aide.

J'ai plusieurs machine virtuel qui tourne sur un serveur dédié.
Le serveur et toutes ces VM sont sous Arch.

Pour ça j'utilise qemu avec kvm.
Typiquement je les lance comme ca :

Code : Tout sélectionner

/usr/bin/qemu-system-x86_64 -enable-kvm -cpu host -nodefaults -monitor telnet:localhost:12444,server,nowait -smp 1 -m 2048 -vnc localhost:42 -boot order=c -drive file=demo/demo.img,if=virtio -net nic,model=virtio,macaddr=42:AA:FF:EF:A8:5C -net user -redir tcp:12340::80 -redir tcp:12341::443 -redir tcp:12342::22
Sur le serveur :
J'ai un apache qui tourne en "reverse proxy", a coup de ProxyPass et ProxyPassReverse. Ceci me permet de fait pointer mes differents "Virtual Host" vers les VM qui vont bien.

Code : Tout sélectionner

    ProxyPass /error !
    ProxyPass / http://localhost:12340/
    ProxyPassReverse / http://localhost:12340/
Avec ou sans SSL, et quelques règles mod_rewrite pour donner du 403 au requête "louche".
Plus un fail2ban qui surveille les logs apaches (Donc aussi iptables).

Sur les guest (VM) , j'ai aussi un serveur apache qui tourne, la plupart du temps avec PHP et MariaDB.
En fonction des VM j'ai un ou plusieurs CMS d'installé, des pages statiques (html), ou des projets persos.



Mon problèmes est que, après un certain temps (entre 12 et 72 h), j'ai une ou plusieurs vm qui partent en vrillent, mais jamais toutes en même temps, et pas toujours les mêmes.

Du coter serveur, je remarque 100% d'utilisation du cpu pour le processus qemu.
Alors je ne peux plus me connecté sur les VM impacté, que ce soit par le web (Firefox) ou par ssh.

Si j'ai déjà une sessions ouverte sur le guest, je ne suis pas déconnecté et avec un top, je peux me rendre compte que le load est souvent ridicule (inférieur à 1)

Les VM impactés ne répondent plus au signaux de l'utilisateur qui lance qemu, pour faire un kill je suis obligé de le faire en tant que root.

A noter que ça n'impacte pas les autres VM, qui reste accessible et "calme" d'un point de vue CPU.

J'ai aussi remarqué sans trop savoir si c'est la conséquence ou la cause, que des connections en FIN_WAIT2 s'accumule et ne se termine jamais.

Je n'ai pas touché a la configuration tcp par défaut, et je pense que normalement il y a un timeout pour ce genre de chose.

Typiquement avec netstat je vois des choses comme ca :

Code : Tout sélectionner

tcp        0      0 127.0.0.1:12340         127.0.0.1:41847         FIN_WAIT2  
C'est donc visiblement les connexion reverse proxy avec les VM qui ne se terminent jamais.

Ce nombre de wait augmente régulièrement, pour atteindre en moins de 24h, entre 1000 et 1500.


Avant hier je suis passer à virtio pour le driver qemu de disque dur et réseau,
je n'ai pas encore constaté d'utilisation abusive du CPU même si je remarque toujours de gros écart entre ce qui est annoncé sur le serveur et sur les VM.

A noter que j'ai rebooter plusieurs fois depuis (pour d'autre raison) et donc je ne sais pas encore si ça règle mon problème de CPU.


De plus ça n'a visiblement aucun impacte sur le nombre de FIN_WAIT2 (qui s'accumule toujours)

J'ai pensé a faire un cron qui compte le nombre de FIN_WAIT2 et reboot le serveur a partir de 500, mais je ne pense pas que c'est une solution sur le long terme :)


Alors voila, j'aimerais savoir comment je peux faire pour :
- trouver la cause des ces FIN_WAIT2 qui reste
- trouver comment forcer le noyau Linux a appliquer les timeout par défaut de tcp
- trouver la cause de ces montés de CPU


Aussi si vous avez des solutions, des idées, ou des questions n’hésitez pas, toutes les pistes sont bonnes à suivre.
"The three principal virtues of a programmer are Laziness, Impatience, and Hubris." -> man perl
Avatar de l’utilisateur
benjarobin
Maître du Kyudo
Messages : 17222
Inscription : sam. 30 mai 2009, 15:48
Localisation : Lyon

Re: [qemu/apache] CPU & FIN_WAIT2

Message par benjarobin »

Tu as quelle version du kernel linux sur l'ensemble des machines ?
Zsh | KDE | PC fixe : core i7, carte nvidia
Titre d'un sujet : [Thème] Sujet (état) / Règles du forum
Fanch
archer
Messages : 144
Inscription : lun. 01 déc. 2008, 21:16

Re: [qemu/apache] CPU & FIN_WAIT2

Message par Fanch »

Que ce soit le kernel, qemu ou apache, j'utilise toujours la dernière version disponible dans les dépôts ArchLinux.

De mémoire sur les deux dernières semaines, il y a eu au moins deux mise a jour du paquet linux.
La plupart du temps moins de 6h après je suis à jour.

J'ai eu au moins une fois le cas avec la version du 14 avril (3.14.1-1)
"The three principal virtues of a programmer are Laziness, Impatience, and Hubris." -> man perl
Fanch
archer
Messages : 144
Inscription : lun. 01 déc. 2008, 21:16

Re: [qemu/apache] CPU & FIN_WAIT2

Message par Fanch »

Excusez moi pour le double post.

Reboot à 10h27 ce matin, avec Arch à jour (Inclus la derniere version de qemu dispo aujourd'hui)

Plus de reponse d'une de mes VM a partir de 16h29 cette aprés midi (premier code 502 dans les logs apache)

Resultat du top sur le serveur :

Code : Tout sélectionner

 
top - 16:58:01 up  6:30,  6 users,  load average: 1.12, 1.23, 1.37
Tasks: 124 total,   2 running, 122 sleeping,   0 stopped,   0 zombie
%Cpu(s):  1.4 us,  1.8 sy,  0.0 ni, 90.2 id,  6.6 wa,  0.0 hi,  0.0 si,  0.0 st
KiB Mem:  32851592 total,  2246428 used, 30605164 free,     9804 buffers
KiB Swap:  1046520 total,        0 used,  1046520 free.    34864 cached Mem

  PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND
  301 marvin    20   0 4472824 653408   6424 R  98.9  2.0  37:24.69 qemu-syste+
  848 root      20   0 2401680  21852   2644 S   6.6  0.1   5:37.41 fail2ban-s+
20486 root      20   0   17308   1580   1144 S   6.6  0.0   0:05.73 top
    1 root      20   0   25916   3616   1832 S   0.0  0.0   0:00.52 systemd
    2 root      20   0       0      0      0 S   0.0  0.0   0:00.00 kthreadd
    3 root      20   0       0      0      0 S   0.0  0.0   0:00.27 ksoftirqd/0
    4 root      20   0       0      0      0 S   0.0  0.0   0:00.64 kworker/0:0
    5 root       0 -20       0      0      0 S   0.0  0.0   0:00.00 kworker/0:+
    7 root      rt   0       0      0      0 S   0.0  0.0   0:00.50 migration/0
    8 root      20   0       0      0      0 S   0.0  0.0   0:00.00 rcu_bh
    9 root      20   0       0      0      0 S   0.0  0.0   0:02.91 rcu_sched
Resultat du top sur la vm qui ne repond plus :

Code : Tout sélectionner

top - 17:52:01 up  7:24,  1 user,  load average: 0,00, 0,01, 0,05
Tasks:  70 total,   1 running,  69 sleeping,   0 stopped,   0 zombie
%Cpu(s):  0,7 us,  0,2 sy,  0,0 ni, 98,2 id,  0,9 wa,  0,0 hi,  0,0 si,  0,0 st
KiB Mem:   2054628 total,   352084 used,  1702544 free,    28456 buffers
KiB Swap:        0 total,        0 used,        0 free.    93792 cached Mem

  PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND
    1 root      20   0   25764   3224   1824 S   0,0  0,2   0:00.25 systemd
    2 root      20   0       0      0      0 S   0,0  0,0   0:00.00 kthreadd
    3 root      20   0       0      0      0 S   0,0  0,0   0:01.22 ksoftirqd/0
    5 root       0 -20       0      0      0 S   0,0  0,0   0:00.00 kworker/0:0H
    6 root      20   0       0      0      0 S   0,0  0,0   0:00.12 kworker/u4:0
    7 root      20   0       0      0      0 S   0,0  0,0   0:00.65 rcu_preempt
    8 root      20   0       0      0      0 S   0,0  0,0   0:00.00 rcu_sched
    9 root      20   0       0      0      0 S   0,0  0,0   0:00.00 rcu_bh
   10 root      rt   0       0      0      0 S   0,0  0,0   0:00.00 migration/0
   11 root      rt   0       0      0      0 S   0,0  0,0   0:00.14 watchdog/0
....

  347 root      20   0  380688  18064  10112 S   0,0  0,9   0:00.78 /usr/bin/httpd
  349 http      20   0  179688   4164    600 S   0,0  0,2   0:00.00 /usr/bin/httpd
  413 root      20   0       0      0      0 S   0,0  0,0   0:00.79 kworker/0:0
  454 http      20   0  388456  22760   6200 S   0,0  1,1   0:30.82 /usr/bin/httpd
  455 http      20   0  388784  23124   6136 S   0,0  1,1   0:35.37 /usr/bin/httpd
  462 root      20   0   82380   3968   3100 S   0,0  0,2   0:00.38 sshd
  464 root      20   0   24372   1708   1380 S   0,0  0,1   0:00.00 systemd
  465 root      20   0   75444   1668      0 S   0,0  0,1   0:00.00 (sd-pam)
  467 root      20   0   21676   2952   1740 S   0,0  0,1   0:00.01 bash
  472 http      20   0  385148  19484   6136 S   0,0  0,9   0:37.43 /usr/bin/httpd
  483 http      20   0  381568  15560   5884 S   0,0  0,8   0:00.11 /usr/bin/httpd
Nombre de process en FIN_WAIT2 :

Code : Tout sélectionner

netstat -an | grep FIN_WAIT2 | wc -l
1030
Le serveur apache n'est vraiment pas beaucoup solicité, trés peu de requete traité pendant les 20 minutes precedentes :

Code : Tout sélectionner

grep "19/Apr/2014:16:[1-3]" access_*log | wc -l
351
Le kernel.log :

Code : Tout sélectionner

Apr 19 16:35:37 arch-ovh-fanch kernel: kvm_set_msr_common: 6 callbacks suppressed
Apr 19 16:35:37 arch-ovh-fanch kernel: kvm [337]: vcpu0 unhandled wrmsr: 0x680 data 0
Apr 19 16:35:37 arch-ovh-fanch kernel: kvm [337]: vcpu0 unhandled wrmsr: 0x681 data 0
Apr 19 16:35:37 arch-ovh-fanch kernel: kvm [337]: vcpu0 unhandled wrmsr: 0x682 data 0
Apr 19 16:35:37 arch-ovh-fanch kernel: kvm [337]: vcpu0 unhandled wrmsr: 0x683 data 0
Apr 19 16:35:37 arch-ovh-fanch kernel: kvm [337]: vcpu0 unhandled wrmsr: 0x684 data 0
Apr 19 16:35:37 arch-ovh-fanch kernel: kvm [337]: vcpu0 unhandled wrmsr: 0x685 data 0
Apr 19 16:35:37 arch-ovh-fanch kernel: kvm [337]: vcpu0 unhandled wrmsr: 0x686 data 0
Apr 19 16:35:37 arch-ovh-fanch kernel: kvm [337]: vcpu0 unhandled wrmsr: 0x687 data 0
Apr 19 16:35:37 arch-ovh-fanch kernel: kvm [337]: vcpu0 unhandled wrmsr: 0x688 data 0
Apr 19 16:35:37 arch-ovh-fanch kernel: kvm [337]: vcpu0 unhandled wrmsr: 0x689 data 0
Apr 19 16:35:37 arch-ovh-fanch kernel: kvm [337]: vcpu0 unhandled rdmsr: 0x606
Apr 19 16:35:39 arch-ovh-fanch kernel: kvm [337]: vcpu0 unhandled rdmsr: 0x611
Apr 19 16:35:39 arch-ovh-fanch kernel: kvm [337]: vcpu0 unhandled rdmsr: 0x639
Apr 19 16:35:39 arch-ovh-fanch kernel: kvm [337]: vcpu0 unhandled rdmsr: 0x641
Apr 19 16:35:39 arch-ovh-fanch kernel: kvm [337]: vcpu0 unhandled rdmsr: 0x619
Depuis plus rien dans ce fichier (il est 18h05)

Un kill -15 en tant que root sur le process qemu, relance de la VM, et tout marche à nouveau ...
CPU normal, et FIN_WAIT2 disparu ...
"The three principal virtues of a programmer are Laziness, Impatience, and Hubris." -> man perl
Fanch
archer
Messages : 144
Inscription : lun. 01 déc. 2008, 21:16

Re: [qemu/apache] CPU & FIN_WAIT2

Message par Fanch »

Le probleme vient de la gestion du reseau par qemu.

En le remplacant par vde2 c'est moins KISS, mais ca fonctionne sans souci.
"The three principal virtues of a programmer are Laziness, Impatience, and Hubris." -> man perl
Répondre