Cours optimiser un serveur web IIS
Cours optimiser un serveur web IIS pdf
...
Les objectifs
o Cette présentation a pour objectif de démontrer la faisabilité d’une sécurisation des services serveur à partir du kit d'installation de Windows 2012 Server.
o Nous nous basons uniquement sur des techniques d'administrations et du bon sens approuvés dans la pratique et largement appliquer par les administrateurs de ce niveau des systèmes.
o Nous évitons l'utilisation de logiciels hors Microsoft dans le cadre de ce cours pour assurer un environnement propre lié à la sécurité des accès à un service serveur basé Microsoft
Machine virtuelle
o En informatique, une machine virtuelle (VM) est une illusion d'un appareil informatique créée par un logiciel d'émulation (ex: VirtualBox,Vmware, KVM).
o Le logiciel d'émulation simule la présence de ressources matérielles et logicielles telles que la mémoire, le processeur, le disque dur, voire le système d'exploitation et les pilotes, permettant d'exécuter des programmes dans les mêmes conditions que celles de la machine simulée.
o La virtualisation est possible sous un système d'exploitation avec le logiciel dédié: KVM, QEMU, VMware, VirtualBox, VirtualPC, Xen et Bochs.
Machine virtuelle KVM
o KVM (Kernel-based Virtual Machine) est un hyperviseur libre pour Linux.
o KVM est intégré dans le noyau Linux depuis la version 2.6.20. Il fonctionne originellement sur les processeurs à architectures x86 disposant des instructions de Virtualisation Intel VT ou AMD-V.
o KVM permet de faire fonctionner des machines virtuelles aux OS variés, Windows, Linux, BSD.
o Les étapes :
n Création de disque virtuel (qemu-img)
n Installation du système d'exploitation (kvm)
n Lancement de la machine virtuelle (kvm)
...
Pour déterminer si une ressource est suffisante et comme dans tout problème d'optimisation sous NT, l'outil à employer est l'analyseur de performance (Perfmon).
Pour cela gardez à l'esprit les points suivants:
- il faut observer l'activité pendant une période d'activité normale (et non un creux comme la nuit) et prévoir toujours les accroissements occasionnels (pointes le matin à l'arrivée des utilisateurs sur site par exemple)
- il faut observer l'activité sur une durée suffisamment grande pour être parlante
(un log pris sur dix minutes ne sera pas représentatif)
Sachez de plus, que le système de mémoire virtuelle de NT est conçu pour ajuster de manière automatique ses capacités, vous ne pourrez pas fixer des quantités de ressources à une valeur bien précise. Ce que vous pourrez faire consistera à indiquer des valeurs de départ, des valeurs minimum ou maximum mais pas des valeurs exactes. Le principal objectif du contrôle de la mémoire d'un serveur NT exécutant IIS consiste donc à s'assurer que le serveur dispose d'assez de mémoire physique et non à ajuster la taille de chaque composant comme cela pourrait être le cas avec d'autres systèmes d'exploitation.
De même IIS s'auto-ajuste. Il règle par exemple la taille du cache de ses objets, la remarque précédente est valable pour IIS également.
Les compteur perfmon a analyser sont:
- Objet "Memory", compteur "available bytes": devrait être toujours au dessus de 4 Mo. Si il est en dessous, cela impacte sur la taille du working set alloué aux processus et donc sur la pagination.
- Objet "Paging File", les deux compteurs ("usage" et "usage peak"): une trop forte utilisation du fichier de pagination indique un goulot d'étranglement au niveau de la mémoire.
- Les deux compteurs de l'objet "Memory": "Page Faults/sec" et "Cache Faults/sec" sont également intéressants pour voir les fautes de pages dans le working set des processus ou du cache.
- Les fautes de page 'Hard' sont les plus pénalisantes car elles entraînent une lecture sur le disque. Le ratio fautes de pages 'Hard' / fautes de pages en général indique un sous-dimensionnement mémoire. Pour mesurer les fautes de pages "Hard", il faut prendre les compteurs "Page Reads/sec" de l'objet "Memory". C'est le compteur "Page Faults/sec" vu dans le point précédent qui servira pour quantifier les fautes de pages en général.
Vous connaissez la quantité de mémoire totale embarquée sur votre système, une fois que vous avez analysé l'utilisation qu'en fait NT, regardez ce qu'il en reste pour le fonctionnement d'IIS.
Définition: L'espace de travail (ou "working set") d'un processus est la quantité de mémoire visible par un processus.
L'espace de travail d'inetinfo (le processus d'IIS) est partagé par les services ASP, WWW, FTP et SMTP. Vous devrez donc vous attachez à la taille de ce working set et vous assurer que celle-ci permet à ces services de tourner au mieux. Il n'y a pas de taille standard pour le "working set' d'inetinfo (voir remarque en fin du chapitre 1)
Moins une application pagine, plus ses performances seront bonnes. Pour que IIS fonctionne efficacement, la taille de son Working set doit donc lui permettre d'y maintenir son code en totalité, les fichiers utilisés le plus fréquemment, le cache IIS, les buffers de données pour le logging, et ses structures propres.
Les compteur perfmon a analyser sont:
- Objet "Memory", compteur "available bytes": le système réduit la taille des working set si ce nombre devient inférieur à 4 Mo.
- Objet "Process", compteur "working set" sur le process "inetinfo": pour la taille du working set
- Objet "Process", compteur "Page Fault/sec" sur le process "inetinfo": pour les fautes de pages "Hard" ET "soft" de inetinfo
- Objet "Memory", compteur "Page Faults/sec": pour les fautes de pages "Hard" et "Soft" sur tous les working sets
- Objet "Memory", compteur "Page Reads/sec": pour les fautes de pages "Hard"
(une valeur de 5 indique un sous-dimensionnement mémoire)
- Objet "Memory", compteur "Pages Input/sec": nombre de pages lues pour compenser les fautes de page. C'est un indicateur du 'coût' des fautes de pages.
IIS dispose d'un cache nommé le "IIS Object Cache Data", ce dernier fait partie du working set d'inetinfo. Ce cache peut être paginé sur le disque si la mémoire n'est pas suffisante pour supporter un working set suffisamment large pour inetinfo luimême. Il est important d'avoir assez de mémoire pour maintenir le cache dans le working set. Augmentez le contenu de la valeur ObjectCacheTTL sous
HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\InetInfo\Parameters si vous suspectez que le cache est rafraîchit trop souvent au regard des compteurs de l'objet "Internet Information Services Global":
- Cache Hits
- Cache Misses
- Cache Hits %
- Cache Flushes
- Objects
N'oubliez pas également que comme tout service demandant un fichier, IIS s'appuie sur le cache du système de fichiers.
Exemple: Supposons qu'un thread d'IIS doit ouvrir un fichier. Il faut d'abord stocker le handle sur ce fichier dans le cache d'objet d'IIS puis stocker les données du fichier dans le cache du système de fichiers.
C'est donc l'objet "Cache" qui est à analyser:
- "MDL Reads/sec"
- "MDL Read Hits %" (l'inverse est donc équivalent au compteur "Cache Faults" de l'objet "Memory")
- "Read Aheads/sec" (basé sur l'algorithme de prédiction du gestionnaire de cache : de plus larges blocs de données sont lus à chaque opération de lecture lorsqu'une lecture séquentielle est détectée)
Définition: MDL = Memory Descriptor List. Les lectures MDL sont des opérations de lecture dans lesquelles le système utilise une liste d'adresses physiques pour chaque page afin d'en simplifier la lecture. Les lectures MDL servent souvent à récupérer des fichiers de pages Web et FTP mis en cache.
- Améliorez la distribution des données: procédez à une défragmentation régulière du disque et surtout conservez les fichiers Web liés entre eux sur les partitions logiques d'un même disque:
Si le taux de défauts de cache est élevé, rajoutez de la mémoire ou pensez à une redistribution efficace des données sur le disque. Des fichiers stockés sur les mêmes partitions logiques ont plus de chance de tirer parti des stratégies d'optimisation du gestionnaire de cache de Windows NT.
- Utilisez NTFS
- Eliminez / Arrêtez les services inutiles
- Recourrez à la mise en miroir et aux agrégats par bande
- Remplacez ou convertissez les applications CGI
- Accroissez les fichiers d'échange (ajoutez-en, agrandissez-les)
- Modifiez les valeurs temporelles du cache d'objets IIS (ObjectCacheTTL)
- Modifiez l'équilibre entre cache du système de fichiers et espace de travail IIS. Par défaut, lors de l'allocation de l'espace de mémoire, les serveurs exécutant Windows NT sont configurés pour donner la préférence au cache du système de fichiers par rapport aux espaces de travail des processus. Bien que les serveurs IIS bénéficient d'un large cache de système de fichiers, ce réglage entraîne souvent l'écriture sur disque de tout le code paginable d'IIS ce qui ralentit son traitement. Afin de l'éviter, réglez les propriétés du service serveur (dans les propriétés du réseau) sur l'option "Débit maximal pour les applications réseau" (redémarrage nécessaire).
Figure 5 : Favoriser un "Débit maximal pour les applications réseau"
- Limitez les connexions. Si le serveur manque de mémoire la limitation du nombre de connexions peut améliorer la situation (10Ko pour chaque connexion afin de gérer les structures de données qui en assurent le suivi). FTP est limité à 1000 par défaut mais pas le Web (ni le SMTP d'ailleurs)
Figure 6 : Limitez les connexions si cela est envisageable
La même remarque faite concernant les besoins en mémoire est valable pour la ressource processeur, mais il faut savoir que un trop grand nombre de processeurs peut nuire aux performances d'un serveur. Comme toujours, il faut évaluer les besoins et y pourvoir mais ne pas tomber dans l'excès.
Le code d'IIS est multi-thread, dans le cas d'un goulet d'étranglement de la ressource processeur, les threads actifs du processus doivent attendre dans une file d'attente que des ressources se libèrent. Dans ces conditions, rajouter de la mémoire, des connexions réseau ou des disques ne servira à rien.
Dans ce chapitre nous verrons qu'il est possible d'ajuster le nombre de threads et répartir ces derniers sur différents processeurs.
Note: Quand vous analysez la charge processeur, ce ne sont pas les pics d'activité qui doivent capter votre attention. Un processeur qui est à 100% d'utilisation occasionnellement est beaucoup moins préoccupant qu'un processeur étant constamment entre 70% et 80% d'utilisation.
Figure 7 : Un exemple d'une ressource processeur ayant faire à un pic d'activité mais dont le dimensionnement permet d'assurer la charge
Il convient de s'assurer que la ressource CPU disponible est suffisante à NT avant même de se demander si ce dont va pouvoir disposer IIS est suffisant.
Le ou les processeurs d'un serveur doivent supporter le système d'exploitation et tous les processus relatifs aux services Internet.
Les compteurs perfmon à analyser sont:
- Objet "System", compteur "Processor Queue Length": nombre de threads en attente. Une valeur de 2 en continu indique un problème processeur.
- Objet "System", compteur "% Total Processor time": si trop important cela signifie une charge significative des processeurs
- Objet "Processor", compteur "% Processor time": si très différent du précédent cela indique un problème de distribution de la charge entre les processeurs.
- Objet "Processor", compteurs "% Privileged Time" et "% User Time": à comparer pour voir si le système travaille plus pour NT lui-même ou pour IIS (et les autres processus en mode user)
Remarque: Nous parlons dans ce paragraphe de NT et non d'IIS donc vous noterez que les compteurs ci-dessus n'ont aucun rapport avec le service web mais sont côté système.
La cause la plus courante d'un apparent goulet d'étranglement du processeur provient de la mémoire. Si le système ne dispose pas d'assez de mémoire physique pour stocker le code et les données nécessaires aux programmes, le processeur perdra une partie notable de son temps en opérations de pagination.