Mesure de la performance

1) vmstat

La commande vmstat fournit des statistiques concernant l'activité CPU, les disques, la mémoire et les kernel threads vmstat [ -f ] [ -i ] [ -s ] [ -I ] [ -t ] [ -v ] [ PhysicalVolume ... ] [Interval [ Count ] ] -f : affiche le nombre de forks depuis le dernier démarrage du système (fork: fonction de duplication d'un processus père -> fils) -i : affiche le nombre d'interruptions prises pour chacun des devices depuis le dernier démarrage du système En général, la commande vmstat est exécutée avec un argument d'intervalle et un argument de nombre rapports souhaités. ex: vmstat 2 5 # exécute 5 fois vmstat avec un intervalle de 2 secondes entre chaque Sans argument, vmstat fournit les statisques depuis le dernier démarrage du système
  • Interpréter les résultats
kthr     memory             page              faults          cpu ----- ----------- ------------------------ ------------ ----------- r  b   avm   fre  re  pi  po  fr   sr  cy  in   sy  cs us sy id wa kthr (infos sur les Kernel THReads) r    processus prêts en attente d'exécution dans la run queue b    processus bloqués en attente de ressources (E/S, demande de pages) dans la wait queue. memory (infos sur la mémoire physique et virtuelle) avm    nombre moyen de pages actives (4ko) de la mémoire virtuelle (une page est considérée active si elle appartient à des processus exécutables ou qui se sont exécutés depuis moins de 20 secondes) fre    nombre moyen  de pages (4ko) de mémoire réelle dans la liste des pages disponibles (freelist). Cette colonne représente la mémoire disponible. L’activité de pagination est reflétée par une diminution significative de la mémoire disponible page (infos sur l’activité de pagination) re    nombre/s de pages réclamées c’est-à-dire le nombre de pages placées dans la liste des pages disponibles (freelist) mais réclamées par leur propriétaire avant qu’elle ne soient réutilisées. pi    pagination in (de l’espace de pagination vers la mémoire réelle) po    pagination out (de la mémoire réelle vers l’espace de pagination) fr    nombre/s de pages mémoire libérées par l’algorithme de remplacement de page durant l’intervalle de mesure. sr    nombre/s de pages/s examinées par l'algorithme de replacement cy    nombre/s de cycles d'horloge pour l'algorithme de replacement vmstat5.po doit être proche de0 et la colonne de vmstat.pi n’est pas très significative car le lancement d’un processus provoque la pagination de son image exécutable et de ses données. Lorsqu’un processus est lancé, le chiffre de cette colonne augmentera por retomber rapidement à un niveau normal. vmstat5.po / vmstat5.fr > 1 / 6(vol de pages) faults (infos sur les processus) in    nombre/s d’intérruption par secondes hors-horloge sy    appels système par seconde. Un appel système provoque l’utilisation par le processus du code système pour son propre compte. (exemple lecture/écriture sur un fichier). cs    taux de changement de contexte par seconde cpu (infos sur l'utilisation du CPU) us    % temps CPU user (process de priorités comprises entre 127 et 50). Lorsqu’un processus s’exécute en mode utilisateur, il utilise son propre code et ne fait pas appel aux ressources du noyau. sy    % temps CPU noyau (processus compris entre 49 et 0) qui résulte à la fois du surcoût induit par l’exécution des process utilisateurs qui ont besoin de ressources noyau (exemple lecture/écriture sur un fichier) et du temps passé à offrir des services système. id     % de temps CPU non utilisé vmstat5.id > 5%, vmstat5.us > 2 x vmstat5.sy, vmstat5.wa < 25%  

2) sar (System Activity Report)

La commande sar peut-être utilisée en temps réel ou a posteriori, pour étudier les performances du système sur une période donnée. /usr/sbin/sar [ { -A | [ -a ] [ -b ] [ -c ] [ -d ][ -k ] [ -m ] [ -q ] [ -r ] [-u ] [ -V ] [ -v ] [ -w ] [ -y ] } ] [ -P ProcessorIdentifier, ... | ALL ] [-ehh [ :mm [ :ss ] ] ] [ -XFile ] [ -fFile ] [ -iSeconds ] [ -oFile ] [ -shh [:mm [ :ss ] ] ] [ Interval [ Number ] ] * Pour une utilisation en temps réel, indiquez à sar, un argument d'intervalle et un argument de nombre rapports souhaités. ex: # sar 2 2 (2 rapports avec un intervalle de 2 secondes) AIX servername 2 5 0037879F4C00    05/28/07 11:08:53    %usr    %sys    %wio   %idle 11:08:55      25      15      19      42 11:08:57      20      11      22      47 Average       23      13      20      44 * Pour une utilisation à posteriori, il convient de planifier en crontab les tâches suivantes : 0 * * * *  /usr/lib/sa/sa1 600 6 & 50 23 * * * /usr/lib/sa/sa2 -A & le script sa1 est une variante de sadc, il collecte et stocke les données dans le binaire /var/adm/sa/sajj (jj pour le jour concerné). L'entrée en crontab ci-dessus ordonnance une prise de performance toutes les 600 secondes, 6 fois de suite = 60 minutes ; la commande étant lancée toutes les heures, les informations seront collectées en permanence, toutes les 10 minutes. le script sa2 exécute la commande sar et produit des rapports quotidiens sous /var/adm/sa/sarjj (jj pour le jour concerné). Il extrait toutes les données du binaire du jour selon les options choisies. Les options de la commande sar
-A sans le flag -P, équivaut à -abckmqruvwy. Avec le flag -P, équivaut à -acmuw
-a Opérations d'accès aux fichiers
-b Activité des buffers
-c Activité des appels système
-d Activité des périphériques de type bloc
-f Extrait les données d'un fichier (créé par le flag -o). Par défaut la valeur est le fichier /var/adm/sa/sajj en cours
-k Activité du noyau
-m Utilisation des IPC
-o Enregistre le résultat dans un binaire
-P Affiche les statistiques par processeur (rajouter l'Identifiant Processeur | ALL)
-q Statistiques de la file d'attente (queue)    % moyen de processus prêts à s'exécuter en swap et en mémoire
-r Activité de la pagination
-u Activité des processeurs
-V Lit un fichier enregistré sur une version précédente
-v Etat des tables du noyau
-w Nombre de changement de contextes par seconde
-y Activité des terminaux
# sar –u : activité des processeurs %usr : % de temps passé en mode utilisateur %sys : % de temps passé en mode système %wio : % de temps durant lequel le processeur est en attente d’une réponse d’une I/O %idle : % de temps durant lequel le processeur n’est pas utilisé sar-u5.idle > 5%, sar-u5.wio doit être faible (entre 5% et 10%) sar-u5.usr > 2 x sar-u5.sys # sar –d : activité des disques device : nom du périphérique %busy : pourcentage de temps durant lequel le disque sert la requête avque : nombre moyen de requête dans la file d’attente r+w/s : lecture/écriture effectuée par seconde blks/s : blocs de 512 octets transférés par seconde. avwait : temps moyen d’attente dans la file d’attente avserv : temps moyen de service pour une requête sar-d5.busy < 20%, sar-d5.avwait < sar-d5.avserv, sar-d5.avserv < 50ms # sar –q : file d’attente en exécution runq-sz : file d’attente des processus en attente d’exécution %runocc : % de temps durant lequel la file d’attente contient des processus swpq-sz : file d’attente des processus swappés en attente d’exécution %swpocc : % de temps durant lequel la file d’attente de swap est occupée par des processus sar-q5.runq.sz < 5 # sar –b : activité des buffers et cache bread/s : nombre de lecture/s du disque vers le cache lread/s : nombre de lecture /s dans le cache %rcache : taux de réussite d’accès en lecture dan le cache bwrit/s : nombre d’écriture/s du cache vers le disque lwrit/s : nombre d’écriture/s dans le cache %wcache : taux de réussite d’accès en écriture dans le cache pread/s : nombre de lecture/s à l’aide de l’appel système physio() pwrit/s : nombre d’écriture/s à l’aide de l’appel système physio() sar-b5.rcache > 95% et sar-b5.wcache > 65% # sar –v : activité des tables du noyau proc-sz : processus actuellement exécutés / processus max (nproc) inod-sz : inodes actuellement en mémoire / inodes max file-sz : taille de la table des fichiers / valeur maximale thrd-sz :  

3) iostat

La commande iostat fournit essentiellement des statistiques concernant l'activité des disques. En général, la commande iostat est exécutée avec un argument d'intervalle et un argument de nombre rapports souhaités. ex: # iostat 2 5 # exécute 5 fois iostat avec un intervalle de 2 secondes entre chaque Sans argument, iostat fournit les statistiques depuis le dernier démarrage du système. Avec argument(s), le premier rapport correspond aux statistiques depuis le démarrage du système. Pour pouvoir bénéficier de iostat, il convient d'autoriser l'historique de l'activité des disques. # smit chgsys    (Change / Show Characteristics of Operating System) Le champs ci-dessous doit être à "true" Continuously maintain DISK I/O history              true iostat [ -s ] [ -a ] [ -d | -t ] [ -T ][ -m ][ PhysicalVolume ... ] [ Interval [Count ] ] -a affiche les statistiques de chaque carte -d affiche uniquement les statistiques concernant les disques -s affiche les statistiques du système -m affiche les statistiques par 'chemin' (si Multi-Path I/O activé) -t affiche uniquement les statistiques concernant l'activité tty (terminaux et pseudo-terminaux) et cpu -T rajoute l'heure à chaque ligne ex: # iostat -a System configuration: lcpu=2 disk=88 tty:      tin         tout   avg-cpu:  % user    % sys     % idle    % iowait 0.0          1.3               2.4      1.7       94.9       0.9 Adapter:                   Kbps      tps    Kb_read   Kb_wrtn scsi0                     34.7       3.2    4269943  25627446 Paths/Disks:       % tm_act     Kbps      tps    Kb_read   Kb_wrtn hdisk0_Path0           1.5      34.7       3.2    4269943  25627446 Adapter:                   Kbps      tps    Kb_read   Kb_wrtn scsi1                     30.3       3.0     490822  25630770 Paths/Disks:       % tm_act     Kbps      tps    Kb_read   Kb_wrtn hdisk1_Path0           1.5      30.3       3.0     490822  25630770 Adapter:                   Kbps      tps    Kb_read   Kb_wrtn fcs0                     1444.3       7.6   18845371  1224352295 Paths/Disks:       % tm_act     Kbps      tps    Kb_read   Kb_wrtn hdisk2                 0.0       0.0       0.0          0         0 hdisk8                 0.0      31.3       0.2        895  26921915 (...) # iostat -t System configuration: lcpu=2 tty:      tin         tout   avg-cpu:  % user    % sys     % idle    % iowait 0.0          1.3               2.4      1.7       94.9       0.9  
  • Interpréter les résultats
avg-cpu (activité CPU) %usr : % de temps CPU utilisateur %sys : % de temps CPU système %idle : % de temps d'inactivité (run queue vide) %iowait : % de temps d'attente I/O tty (activité des terminaux et pseudo-terminaux) tin : nombre de caractères lus par seconde tout : nombre de caractères écrits par seconde disks (activité des disques) %tm_act : % d'activité du disque %Kbps : données transférées en kbytes par seconde (Kb_read + kbytes) Kb_read : données lues en kbytes kbytes : données écrites en kbytes tps : nombre de transferts par seconde  

4) Accounting

Le service "accounting" collecte les données d'utilisation des ressources système et génère des rapports statistiques quotidiens qui peuvent être utilisés pour facturer l'utilisation ou résoudre des problèmes de performance. Ces rapports se trouvent sous /var/adm/acct/sum et se présentent sous la forme "rprtMMJJ" (MM pour le mois et JJD pour le jour). Chaque 1er jour du mois, un rapport mensuel est crée et les rapports quotidiens sont supprimés. Ce rapport mensuel se trouve sous /var/adm/acct/fiscal et se présente sous la forme "fiscrptMM" (MM pour le mois). Ce service peut être d'une aide important, il fournit les informations suivantes : -    dernière connexion des utilisateurs -    nombre de sessions, temps de connexion -    statistiques par utilisateur (consommation CPU, mémoire & disques, temps de connexion, nombre de processus, etc.) -    statistiques par commande (consommation CPU, mémoire & disques) Il est possible de différencier les plages horaires importantes via le fichier /etc/acct/holidays en définissant les plages horaires "Prime Time" et "Non-Prime Time" ; les deux plages sont différenciées dans les rapports. Le fichier "holidays" sert à également à définir les jours fériés. Pour pouvoir utiliser ce service, il faut avoir installé le package "bos.acct" ex: # lslpp -l bos.acct Fileset                      Level  State      Description ---------------------------------------------------------------------------- Path: /usr/lib/objrepos bos.acct                  5.2.0.75  COMMITTED  Accounting Services Path: /etc/objrepos bos.acct                   5.2.0.0  COMMITTED  Accounting Services Pour pouvoir utiliser le service "accounting", il faudra également ordonnancer d'une manière ou d'une autre (ex en crontab) les traitements suivants : * Pour générer les rapports quotidiens (sous /var/adm/acct/sum) /usr/lib/acct/runacct * Pour vérifier les problèmes d'espace /usr/lib/acct/ckpacct ckpacct vérifie l'espace libre sous /var/adm ; si le seuil fixé est dépassé, un message est affiché à la console, un mail est envoyé à root et turnacct est appelé pour suspendre la collecte des informations. ckpacct vérifie la taille de /var/adm/pacct ; si le seuil fixé est dépassé, turnacct est appelé avec l'option switch ce qui génère le fichier pacct devient pacctN et pacct est réinitialisé. * Pour analyser l'utilisation des disques /usr/lib/acct/dodisk Les FS doivent avoir le paramétre "account = true" dans leur config (se rendre dans /etc/filesystems pour vérifier) Le fichier concerné est /var/adm/acct/nite/dacct * pour générer les rapports mensuels  (sous /var/adm/acct/fiscal) /usr/lib/acct/monacct Exemple de fichier /var/adm/acct/sum/rprtMMJJ May 24 23:20 2007 DAILY REPORT FOR AIX Page 1 from Wed May 23 23:20:02 2007 to   Thu May 24 23:20:02 2007 1       openacct 1       runacct 1       acctcon1 TOTAL DURATION: 1440 MINUTES LINE    MINUTES PERCENT # SESS  # ON    # OFF ftp14911        0       0       1       1       1 pts/1   1440    100     2       1       1 pts/2   1440    100     1       1       1 TOTALS  4323    --      10      6       6 LINE : console, pty ou tty utilisée MINUTES : durée d'utilisation en minutes # SESS : nombre de nouvelles connexions # ON : idem # SESS # OFF : nombre de déconnexions May 24 23:20 2007 DAILY USAGE REPORT FOR AIX Page 1 LOGIN    CPU       CPU       KCORE     KCORE     CONNECT   CONNECT   DISK      FEES      # OF        # OF   # DISK UID         NAME     PRIME     NPRIME    PRIME     NPRIME    PRIME     NPRIME    BLOCKS              PROCS       SESS   SAMPLES 0           TOTAL    60        84        732189    253197    1496      2827      0         0         1522158     10     0 0           root     31        69        8375      47173     540       1439      0         0         1413981     4      0 1           daemon   0         0         89        147       0         0         0         0         2695        0      0 UID : User ID LOGIN NAME : nom de l'utilisateur CPU PRIME/NPRIME : temps CPU pour tous les processus de l'utilisateurs (en minutes) KCORE PRIME/NPRIME : total de mémoire utilisée par les processus (en kb par minute) CONNECT PRIME/NPRIME : total de temps de connexion de l'utilisateur (en minutes) DISK BLOCKS : total moyen de l'espace utilisé par l'utilisateur pour les FS ayant l'option "accounting" activée FEES : Total de enregistrements de facturation calculés par la commande chargefee (pour une facturation à la requête (ex: restauration de fichier) # OF PROCS : Total de processus appartenant à l'utilisateur # OF SESS : nombre de connexion de l'utilisateur May 24 23:20 2007 DAILY COMMAND SUMMARY Page 1 TOTAL COMMAND SUMMARY COMMAND      NUMBER    TOTAL     TOTAL    TOTAL       MEAN     MEAN       HOG       CHARS    BLOCKS NAME         CMDS   KCOREMIN   CPU-MIN  REAL-MIN    SIZE-K   CPU-MIN    FACTOR    TRNSFD     READ TOTALS      1522158 985384.00    144.01 388300.31   6842.44      0.00      0.04 8.372e+10    112.00 oracle        22492 878491.25     31.72   9289.43  27694.97      0.00      0.34 2.986e+10      0.00 java              1  48952.55      3.37   1435.73  14528.00      3.37      0.23 2.741e+07      0.00 dsmc             10  28065.89      3.59      5.95   7826.09      0.36     60.28 1.861e+09      0.00 ksh          280796   8080.41     25.18   4365.03    320.85      0.00      0.58 1.292e+09      0.00 (...) COMMAND NAME : nom de la commande exécutée NUMBER CMDS : nombre de fois où la commande est exécutée TOTAL KCOREMIN : total de mémoire utilisée par la commande (en kb par minute) TOTAL CPU-MIN : temps CPU utilisé par la commande (en minutes) TOTAL REAL-MIN : temps réel écoulé pour la commande (en minutes) MEAN SIZE-K : taille moyenne de mémoire utilisée par la commande en minutes-CPU MEAN CPU-MIN : nombre moyen de minutes-CPU par exécution de la commande (= TOTAL CPU-MIN / COMMAND NAME) HOG FACTOR : temps CPU total disponible consommé par le processus durant son exécution CHARS TRNSFD : nombre de caractères transférés par la commande par les appels système read et write BLOCKS READ : nombre d'opérations de lecture et d'écriture des blocs physiques effectuées par la commande May 24 23:20 2007 MONTHLY TOTAL COMMAND SUMMARY Page 1 TOTAL COMMAND SUMMARY COMMAND      NUMBER    TOTAL     TOTAL    TOTAL       MEAN     MEAN       HOG       CHARS    BLOCKS NAME         CMDS   KCOREMIN   CPU-MIN  REAL-MIN    SIZE-K   CPU-MIN    FACTOR    TRNSFD     READ TOTALS     34069395 6.451e+07   4138.80 2.088e+06  15585.73      0.00      0.20 1.524e+12   1502.00 oracle       431267 4.477e+07   1445.00 344211.16  30979.91      0.00      0.42 2.843e+11      0.00 java             23 1.212e+06     83.04  33029.33  14601.56      3.61      0.25 6.367e+08      0.00 (...) May 24 23:20 2007 LAST LOGIN Page 1 (...) 00-00-00  ldap        00-00-00  toto        07-05-24  root Nota Bene : l'écriture 1.123e+9 est égale à 1.123x10 puissance 9 soit 1,123,000,000 et l'écriture 1.123e-9 est égale à 1.123x10 puissance -9 soit 0,000000001123