Bonjour tout le monde,
J'ai trois questions MariaDB / PHP-FPM : * Quelqu'un a-t-il déjà vu MariaDB (10.1.48, paquet Debian Stretch) rien faire (d'après htop, un seul processus MariaDB occupe 200 % du CPU alors que la machine a 12 cœurs + mysqlamin montre que le nombre de « questions » augmente de 15-20 r/s alors qu'en pleine journée ce serveur mange 500-1000 r/s) alors que d'après ss, il y a 3866 connexions établies (je dis bien établies, pas tcp-hanshake ni fin-wait) sur le port 3306 de la machine et que chacune est associée à un thread que mysqladmin étiquette « running » ? Nombre habituel de visiteurs web (d'après les access.log apache httpd). Pas d'IOwait d'après top. Limites "systemd" (nombre de fichiers, nombre de processus) pas atteintes. Lancer un mysql (client cli) TCP : après plusieurs minutes, pas de shell mysql, pas d'erreur non plus.
* Inversement, quelqu'un a-t-il déjà vu PHP-FPM (7.2.35) "oublier" de fermer des connexions à MariaDB (les fameuses 3866 connexions mentionnées au point précédent) et à memcached ? (Au point d'occuper parfois toute la RAM (8G) et le swap (2G).) Pendant ce temps-là, le mod proxy_fcgi d'Apache httpd journalise « Failed to make connection to backend 127.0.0.1:9072 » / « The timeout specified has expired ». Plusieurs telnet sur le port de php-fpm (9072) fonctionnent (connexion établie)…
* Une idée d'outils pour diagnostiquer les interactions PHP<>MariaDB sus-citées ? J'en suis à mysqladmin (pour remonter le nombre de threads (total et running), max de connexions simultanées, requêtes/s, requêtes lentes) + journaux apache http et journaux access de php-fpm. J'ai l'impression de manquer d'infos : quelles requêtes SQL sont traitées à l'instant T (mais si j'active la journalisation, je plombe le serveur) ? Quelles requêtes web traitent php-fpm ? Quel est l'état des requêtes PHP et SQL (en cours, pause, IO wait, en attente du SGBD, etc.) ?
Plus de détails : * Infra classique : N frontaux apache httpd / mod proxy_fcgi + N php-fpm (locaux ou déportés) + 1 MariaDB. Tout dans des VM KVM ; * À répétition, nos sites web timeout. L'error.log d'apache httpd consigne : « Failed to make connection to backend 127.0.0.1:9072 » / « The timeout specified has expired » ; * Dans les graphes, on passe de quelques centaines de connexions établies à MariaDB et à memcached à plusieurs milliers en moins de 10 minutes. Ça ne descend pas, ça s'accumule ; ** Ce qui m'étonne, c'est qu'il n'y a pas de juste milieu entre les deux ("peu" de connexions / 3 k). On doit bien avoir un niveau de trafic web entre ces deux extrêmes, quand même ; * Soit MariaDB travaille d'une manière qui ne me paraît pas être anormale (50 % des 12 cœurs), soit il fait rien (un seul processus à 200 %) ; ** Un nombre de requêtes/s loin du max qu'on encaisse voire de la routine (d'après mysqladmin), genre < 20 r/s quand 3866 connexions sont établies… ; pas de requêtes lentes (même source) ; ** mysqladmin voit les threads comme « running », donc pas comme des connexions établies en attente d'instructions du client ; ** Pas d'IOWait, pas de limites "systemd" (nombre de fichiers, nombre de processus) atteintes ; ** Rien dans le journal de MariaDB ; * Soit ce pic peut correspondre à du "vrai" trafic web… soit non (genre un samedi à 4 h du mat', les access log des apache httpd montrent un trafic égale voire moindre aux jours sans incidents et, évidemment, pas de CRON pour expliquer ça, pas même dans les applis web) ; * Parfois (!), PHP accumule des processus fils donc il mange toute la RAM et le CPU ; * Redémarrer MariaDB (+ PHP parfois, + par impatience que par efficacité prouvée) remet tout dans l'ordre (y compris le nombre de connexions simultanées au memcached) ;
Si quelqu'un a une piste, je suis preneur, parce que moi, là… :D
Bonne fin de semaine.