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