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.123×10 puissance 9 soit 1,123,000,000
et l’écriture 1.123e-9 est égale à 1.123×10 puissance -9 soit 0,000000001123