Souvent, une installation de notre application basée sur Debian et stable s'exécute sur une machine virtuelle - généralement dans VMware ESXi. Dans le cas général, nous n'avons pas de visibilité ou d'influence sur leur environnement de virtualisation et n'avons pas accès, par exemple, au client VMware vCenter ou équivalent. Je me concentre sur VMware ici, car c'est de loin le plus courant que nous voyons.
Nous aimerions:
- Dites à l'administrateur VMware d'un client: Vous pouvez exécuter notre application dans, par exemple, votre environnement VMware ESX, tant qu'il répond aux critères de performance X, Y et Z.
- Être en mesure de déterminer si les critères X, Y et Z sont effectivement respectés en continu (par exemple également en ce moment ), même sur un système en cours d'exécution (nous ne pouvons pas arrêter notre application et exécuter des tests de performance, et un test de performance initial ne suffira pas, car les performances dans les environnements virtuels évoluent avec le temps).
- Ayez confiance que si les critères X, Y et Z sont remplis, nous disposerons de ressources matérielles virtuelles adéquates pour exécuter notre application avec des performances satisfaisantes.
Maintenant, quels sont X, Y et Z?
Nous avons vu maintes et maintes fois que lorsqu'il y a des problèmes de performances, le problème n'est pas avec notre application, mais avec l'environnement de virtualisation. Par exemple, une autre machine virtuelle utilise des tonnes de CPU, de mémoire ou le SAN sur lequel les disques sont réellement stockés sont fortement utilisés par autre chose que notre application. Nous n'avons actuellement aucun moyen de le prouver ou de le réfuter.
Théoriquement, il pourrait également être possible que notre application soit parfois lente ... ;-)
Comment déterminer la cause première de nos problèmes de performances: l'environnement virtuel ou notre application?
Il y a généralement 3 domaines pour les problèmes de performances CPU, mémoire et E / S DISQUE.
CPU
Par exemple, dans VMware, l'administrateur peut spécifier la réservation et la limite, exprimées en MHz, mais est-ce que, par exemple, 512 MHz sur un hôte ESX est exactement le même que 512 MHz sur un autre hôte ESX, éventuellement dans un cluster ESX complètement différent?
Et comment mesurer si nous obtenons réellement cela? Pendant que notre application est en cours d'exécution, nous pouvons peut-être voir que nous sommes à 212% d'utilisation du CPU sur 4 CPU. Est-ce parce que notre application fait beaucoup ou parce qu'une autre machine virtuelle sur le même hôte exécute une tâche gourmande en processeur et utilise tout le processeur?
Mémoire (montgolfière?)
Si nous demandons par exemple 16 Go de RAM, qui est souvent configuré, mais à cause de la montgolfière , nous n'obtenons en fait que 4 Go, et surprise, notre application fonctionne mal.
On peut interroger les outils VMware sur la montgolfière actuelle, mais nous avons constaté qu'elle ment souvent (ou est inexacte au moins). Nous avons vu des exemples où le système d'exploitation pense qu'il y a 16 Go de RAM totale, la somme de la mémoire résidente (RSS) de tous les processus est de 4 Go de RAM, mais il n'y a que 2 Go de RAM libre, même lorsque VMware Tools nous dit qu'il n'y a pas de bulle: - (
De plus, le simple ajout de RSS n'est pas valide, car il pourrait facilement y avoir de la RAM partagée, par exemple une mémoire de copie sur écriture, donc 512 Mo + 512 Mo ne signifient pas nécessairement 1 Go mais pourraient signifier quelque chose de moins. Ainsi, on ne peut pas simplement soustraire RSS de tous les processus pour obtenir une mesure de la quantité de RAM qui devrait être libre et ainsi détecter de manière fiable le gonflement. On peut détecter certains cas de montgolfière, mais il existe d'autres cas où la montgolfière est en vigueur, mais non détectable par cette méthode.
E / S disque
Je suppose que nous pourrions représenter graphiquement au fil du temps le nombre de lectures et d'écritures sur disque, le nombre d'octets lus et écrits et le pourcentage d'attente d'E / S. Mais cela nous donnera-t-il une image précise des E / S disque? J'imagine que s'il y a un mineur Bitcoin en cours d'exécution dans une autre machine virtuelle utilisant tout le processeur, notre% d'attente d'E / S augmentera, même si le SAN sous-jacent donne exactement les mêmes performances, simplement parce que nos ressources de processeur diminuent, et donc l'attente d'E / S ( qui est mesurée en% ) augmente.
Donc, en résumé, quel langage pouvons-nous utiliser pour décrire, par exemple, à un administrateur VMware, quelles performances nous avons besoin, d'une manière portable et mesurable?
la source
"It runs fine with x, y, and z"
n'est pas assez précis. Vous devez être en mesure de dire précisément à vos clients ce dont votre application a besoin. S'ils vous donnent ces ressources et que l'application fonctionne mal, la question ne l'est pas"What do we need from a resource perspective?"
, mais"Why is it performing poorly even though the proper resources have been allocated?"
Réponses:
Sérieusement, la plupart des administrateurs VMware ne sont pas bons dans ce domaine: mauvaise compréhension de la gestion des ressources, souvent aucune connaissance de Linux (cela aide) et manque de bande passante. Je trouve que la plupart des administrateurs internes ont du mal à maintenir une connaissance approfondie de la virtualisation.
Heureusement, il y a un livre que vous pouvez lire !
La plupart des environnements VMware ne sont pas excellents: mauvaise conception de cluster, mauvaise planification des ressources , stockage de qualité inférieure (par exemple Synology NAS), HA mal configuré, pas de surveillance ni de correction.
VMware en tant qu'organisation nous échoue: ils sont particulièrement mauvais pour diffuser des informations à jour et promouvoir les meilleures pratiques. Les recherches de base pour les questions courantes génèrent des résultats à partir de 2009 et des révisions antérieures de VMware, malgré le fait que les processus et les conceptions ont changé au fil du temps.
Toutes ces choses fonctionneront contre vous.
Vous devez déterminer les besoins réels de votre solution. Être en mesure d'indiquer avec précision que votre appareil nécessite: 2 vCPU, 8 Go de RAM et 500 IOP de performances de stockage iraient un long chemin pour quelqu'un comme moi.
L'autre approche consiste à observer un environnement sain ou idéal et à extrapoler les métriques à partir de là.
Vous avez décrit des problèmes avec certains déploiements. Quels étaient les problèmes et les goulots d'étranglement?
Un exemple de machine virtuelle de bonne taille:
Un serveur Exchange pour une organisation de 300 utilisateurs.
Exemples de surveillance des ressources VM.
Good-ish: - VM est de bonne taille. - Le processeur est surchargé dans le cluster, mais nous ne rencontrons pas de conflit.
Mauvais:
la source