Sysstat : Des outils indispensable pour analyser des problèmes de performances

From Deimos.fr / Bloc Notes Informatique
Jump to: navigation, search
Sysstat

1 Introduction

Sysstat est un package qui contient le binaire sar et iostat. Le dernier sert à monitorer uniquement les IO disque, tandis que sar sert à monitorer à peu prêt tout.

2 Installation

2.1 Debian

Sous Debian, il va falloir installer sysstat :

Command aptitude
aptitude install sysstat

2.2 Red Hat

Sous Red Hat, il va falloir installer sysstat :

Command yum
yum install sysstat

2.3 Solaris

Sous Solaris, il va falloir utiliser les packages Sun Freeware pour trouver cet outil :

Command pkg-get
pkg-get install CSWsysstat

3 iostat

iostat va permettre de mesurer les I/O disque. S'il peut être très intéressant de tester les perfs des disques montés sur vos machines, je vous conseil d'utiliser screen afin de vous rendre compte de ce que celà donne en temps réel.

3.1 Linux

Sous linux, voici comment l'utiliser sur le disque sda par exemple :

Command iostat
> iostat -x sda 1 5
 
avg-cpu:  %user   %nice %system %iowait  %steal   %idle           0,21    0,00    0,29    0,05    0,00   99,45 Device:         rrqm/s   wrqm/s     r/s     w/s   rsec/s   wsec/s avgrq-sz avgqu-sz   await  svctm  %utilsda               0,71     1,25    1,23    0,76    79,29    15,22    47,55     0,01    2,84   0,73   0,14 
avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           0,00    0,00    0,00    0,00    0,00  100,00
 
Device:         rrqm/s   wrqm/s     r/s     w/s   rsec/s   wsec/s avgrq-sz avgqu-sz   await  svctm  %util
sda               0,00     0,00    1,00    0,00    16,00     0,00    16,00     0,00    1,00   1,00   0,10
 
avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           0,00    0,00    0,00    0,00    0,00  100,00

  • -x : mode de statistiques étendues
  • 1 : Cela signifie que toutes les secondes, iostat va analyser les performances de tous les disques
  • 5 : Pendant 5 secondes

Les premières lignes de la commande iostat donne une moyenne des I/O depuis le boot de la machine. Voici quelques explications sur les colonnes :

  • r/s : opérations en lecture par seconde
  • w/s : opérations en écriture par seconde
  • await : temps d'attente (r/s + w/s)

Pour savoir si on a des lectures/écritures séquentielles sur le disque :

  • rrqm/s : nombre de requêtes mergées par secondes en lecture
  • wrqm/s : nombre de requêtes mergées par secondes en écriture

Plus les lectures sont séquentielles, plus la rapidité sera présente (sur disques non SSD), plus les secteurs seront dispersés, plus l'attente sera longue.

Pour tester, voici quelques infos utiles[1] :

  • Advise to drop cache for whole file
Command dd
dd if=ifile iflag=nocache count=0

  • Ensure drop cache for whole file
Command dd
dd of=ofile oflag=nocache conv=notrunc,fdatasync count=0

  • Drop cache for part of file
Command dd
dd if=ifile iflag=nocache skip=10 count=10 of=/dev/null

  • Stream data just using readahead cache
Command dd
dd if=ifile of=ofile iflag=nocache oflag=nocache

3.2 Solaris

Sous Solaris, les commandes sont un petit peu différentes :

Command iostat
iostat -xcnCXTdz 1

Pour stresser le disque, nous utiliserons la commande dd qui est une commande de bas niveau :

Command dd
dd if=/dev/zero of=/export/home/dd.img bs=10485760 count=100

Et voici un petit script shell qui fait tout pour vous :

Configuration File bench_disk.sh
#!/bin/sh
# Made by Pierre Mavro
 
echo "What size of file would you like to test (in Mo) ? (ex. 10240 for 10Go) :"
read size
echo "Choose your requiered device :"
df | awk '{ print $1 }'
read device
echo ""
echo "Please enter to confirm : a test_array_file file of $size will be created in $device"
read ok
echo ""
echo "Starting disk bench (Ctrl+C to stop)..."
dd if=/dev/zero of=$device/test_array_file bs=1024k count=$size &
iostat -nmCxz 1

4 sar

sar est un outil qui va nous permettre de monitorer beaucoup de choses. A l'installation de sysstat, sar va se mettre en crontab pour exécuter régulièrement des sondages placés dans /var/log/sa.

Vous pouvez à tout moment changer la crontab par défaut :

Configuration File /etc/cron.d/sysstat
# Run system activity accounting tool every 10 minutes
*/10 * * * * root /usr/lib64/sa/sa1 -S DISK 1 1
# 0 * * * * root /usr/lib64/sa/sa1 -S DISK 600 6 &
# Generate a daily summary of process accounting at 23:53
53 23 * * * root /usr/lib64/sa/sa2 -A

Décommentez toutes les lignes ou ajustez selon vos besoins. Pour lire par la suite ces fichiers, utilisez la commande sar comme ceci :

Command sar
sar -d -f /var/log/sa/saXX

  • XX : jour du mois

Une petite chose importante avant d'utiliser sar, créez vous un alias dans votre bashrc ou le fichier de préférences pour votre shell favori afin que les heures s'affichent correctement :

Configuration File ~/.zshrc
 alias sar='LANG=C sar'

4.1 Disques

Pour monitorer les disques, c'est l'option -d qu'il faut utiliser :

Command sar
> sar -d 1 2
 
13:57:03          DEV       tps  rd_sec/s  wr_sec/s  avgrq-sz  avgqu-sz     await     svctm     %util
13:57:04      dev8-16      0,00      0,00      0,00      0,00      0,00      0,00      0,00      0,00
13:57:04       dev8-0      0,00      0,00      0,00      0,00      0,00      0,00      0,00      0,00
13:57:04     dev253-0      0,00      0,00      0,00      0,00      0,00      0,00      0,00      0,00
13:57:04     dev253-1      0,00      0,00      0,00      0,00      0,00      0,00      0,00      0,00
 
13:57:04          DEV       tps  rd_sec/s  wr_sec/s  avgrq-sz  avgqu-sz     await     svctm     %util
13:57:05      dev8-16      0,00      0,00      0,00      0,00      0,00      0,00      0,00      0,00
13:57:05       dev8-0      0,00      0,00      0,00      0,00      0,00      0,00      0,00      0,00
13:57:05     dev253-0      0,00      0,00      0,00      0,00      0,00      0,00      0,00      0,00
13:57:05     dev253-1      0,00      0,00      0,00      0,00      0,00      0,00      0,00      0,00
 
Moyenne :         DEV       tps  rd_sec/s  wr_sec/s  avgrq-sz  avgqu-sz     await     svctm     %utilMoyenne :     dev8-16      0,00      0,00      0,00      0,00      0,00      0,00      0,00      0,00Moyenne :      dev8-0      0,00      0,00      0,00      0,00      0,00      0,00      0,00      0,00Moyenne :    dev253-0      0,00      0,00      0,00      0,00      0,00      0,00      0,00      0,00Moyenne :    dev253-1      0,00      0,00      0,00      0,00      0,00      0,00      0,00      0,00

Comme vous pouvez le voir, les dernières lignes correspondent aux moyennes depuis le boot de la machine.

Si les devices des disques ne vous parlent pas trop, vous pouvez utiliser l'option -p :

Command sar
> sar -d -p 1 2
 
14:13:28          DEV       tps  rd_sec/s  wr_sec/s  avgrq-sz  avgqu-sz     await     svctm     %util
14:13:29          sdb      0,00      0,00      0,00      0,00      0,00      0,00      0,00      0,00
14:13:29          sda      0,00      0,00      0,00      0,00      0,00      0,00      0,00      0,00
14:13:29    VolGroup-lv_root      0,00      0,00      0,00      0,00      0,00      0,00      0,00      0,00
14:13:29    VolGroup-lv_swap      0,00      0,00      0,00      0,00      0,00      0,00      0,00      0,00
 
14:13:29          DEV       tps  rd_sec/s  wr_sec/s  avgrq-sz  avgqu-sz     await     svctm     %util
14:13:30          sdb      0,00      0,00      0,00      0,00      0,00      0,00      0,00      0,00
14:13:30          sda      0,00      0,00      0,00      0,00      0,00      0,00      0,00      0,00
14:13:30    VolGroup-lv_root      0,00      0,00      0,00      0,00      0,00      0,00      0,00      0,00
14:13:30    VolGroup-lv_swap      0,00      0,00      0,00      0,00      0,00      0,00      0,00      0,00
 
Moyenne :         DEV       tps  rd_sec/s  wr_sec/s  avgrq-sz  avgqu-sz     await     svctm     %util
Moyenne :         sdb      0,00      0,00      0,00      0,00      0,00      0,00      0,00      0,00
Moyenne :         sda      0,00      0,00      0,00      0,00      0,00      0,00      0,00      0,00
Moyenne :   VolGroup-lv_root      0,00      0,00      0,00      0,00      0,00      0,00      0,00      0,00
Moyenne :   VolGroup-lv_swap      0,00      0,00      0,00      0,00      0,00      0,00      0,00      0,00

4.2 CPU

Pour analyser le CPU :

Command sar
> sar -u 1 3
 
14:20:56        CPU     %user     %nice   %system   %iowait    %steal     %idle
14:20:57        all      0,00      0,00      0,00      0,00      0,00    100,00
14:20:58        all      0,00      0,00      0,00      0,00      0,00    100,00
14:20:59        all      0,00      0,00      0,99      0,00      0,00     99,01
Moyenne :       all      0,00      0,00      0,33      0,00      0,00     99,67

4.3 Mémoire

Pour monitorer la mémoire :

Command sar
> sar -r 1 30
Linux 3.2.0-3-amd64 (deb-pmavro) 	13/09/2012 	_x86_64_	(2 CPU)
 
18:17:01    kbmemfree kbmemused  %memused kbbuffers  kbcached  kbcommit   %commit  kbactive   kbinact
18:17:02       275472   3617496     92,92    220604   1635456   4294436     55,08   2053992   1312976
18:17:03       275612   3617356     92,92    220604   1635140   4294136     55,08   2054064   1312708
18:17:04       268048   3624920     93,11    220616   1642852   4302016     55,18   2054192   1320488
18:17:05       276356   3616612     92,90    220616   1634612   4293660     55,07   2054348   1312128

Vous pouvez également utiliser vmstat pour monitorer la mémoire :

Command vmstat
> vmstat -n 1 30
procs -----------memory---------- ---swap-- -----io---- -system-- ----cpu----
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa
 0  0  52600 272952 220800 1636336    0    1   572   587  471  222 19  3 75  3
 3  0  52600 272828 220804 1635904    0    0     0   140 2969 6041 16  3 79  2
 0  0  52600 275108 220804 1635492    0    0     0     0 3016 6002 18  3 80  0
 0  0  52600 274984 220804 1635184    0    0     0   220 2327 4608 14  3 83  0
 0  0  52600 277836 220804 1635044    0    0     0     0 2868 5820 24  4 72  0

  • free, buff et cache : le nombre de mémoire en KiB qui est idle
  • si et so : correspondent à l'utilsation de la swap
  • swpd : la taille en KiB de swap utilisé

Pour monitorer le taux de changement :

Command sar
> sar -R 1 30   
Linux 3.2.0-3-amd64 (deb-pmavro) 	13/09/2012 	_x86_64_	(2 CPU)
 
18:18:42      frmpg/s   bufpg/s   campg/s
18:18:43     -2203,00      0,00   2202,00
18:18:44       713,00      0,00      8,00
18:18:45      -279,00      0,00    404,00
18:18:46       186,00      0,00    -13,00
18:18:47       -93,00      0,00     26,00
18:18:48      -155,00      2,00    -18,00
18:18:49        62,00      0,00    -44,00

4.4 Swap

Pour analyser la swap :

Command sar
> sar -W 1 3
 
14:22:10     pswpin/s pswpout/s
14:22:11         0,00      0,00
14:22:12         0,00      0,00
14:22:13         0,00      0,00
Moyenne :        0,00      0,00

4.5 Network

Pour une analyse réseaux :

Command sar
> sar -n DEV 1 2
 
14:23:47        IFACE   rxpck/s   txpck/s    rxkB/s    txkB/s   rxcmp/s   txcmp/s  rxmcst/s
14:23:48           lo      0,00      0,00      0,00      0,00      0,00      0,00      0,00
14:23:48         eth0      1,00      1,00      0,06      0,17      0,00      0,00      0,00
 
14:23:48        IFACE   rxpck/s   txpck/s    rxkB/s    txkB/s   rxcmp/s   txcmp/s  rxmcst/s
14:23:49           lo      0,00      0,00      0,00      0,00      0,00      0,00      0,00
14:23:49         eth0      2,00      1,00      0,12      0,38      0,00      0,00      1,00
 
Moyenne :       IFACE   rxpck/s   txpck/s    rxkB/s    txkB/s   rxcmp/s   txcmp/s  rxmcst/s
Moyenne :          lo      0,00      0,00      0,00      0,00      0,00      0,00      0,00
Moyenne :        eth0      1,50      1,00      0,09      0,28      0,00      0,00      0,50

4.6 Les IO

Pour monitorer tous les IO :

Command sar
> sar -B 1 30
Linux 3.2.0-3-amd64 (deb-pmavro) 	13/09/2012 	_x86_64_	(2 CPU)
 
18:19:33     pgpgin/s pgpgout/s   fault/s  majflt/s  pgfree/s pgscank/s pgscand/s pgsteal/s    %vmeff
18:19:34         0,00      0,00    106,00      0,00   3105,00      0,00      0,00      0,00      0,00
18:19:35         0,00      0,00     58,00      0,00   1567,00      0,00      0,00      0,00      0,00
18:19:36         0,00      0,00     82,00      0,00   1039,00      0,00      0,00      0,00      0,00
18:19:37         0,00      0,00    205,00      0,00   1530,00      0,00      0,00      0,00      0,00
18:19:38         0,00     44,00    131,00      0,00   1192,00      0,00      0,00      0,00      0,00

4.7 Les processus

Il est possible via la commande pidstat d'obtenir beaucoup d'informations sur un processus ne particulier :

Command pidstat
> pidstat -p 2365 1 50
Linux 3.2.0-4-amd64 (ZG020194) 	05/07/2013 	_x86_64_	(2 CPU)
 
02:12:57 PM       PID    %usr %system  %guest    %CPU   CPU  Command
02:12:58 PM      2365    1.00    0.00    0.00    1.00     0  awesome
02:12:59 PM      2365    0.00    0.00    0.00    0.00     0  awesome
02:13:00 PM      2365    0.00    1.00    0.00    1.00     0  awesome

Il est également possible de monitorer les IO (-d) ou encore le top 5 des processus en pagefault :

Command pidstat
> pidstat -T CHILD -r 2 5   
Linux 3.2.0-4-amd64 (ZG020194) 	05/07/2013 	_x86_64_	(2 CPU)
 
02:16:02 PM       PID minflt-nr majflt-nr  Command
02:16:04 PM      2252         1         0  VBoxService
02:16:04 PM      2365        50         0  awesome
02:16:04 PM      4938         7         0  firefox
02:16:04 PM      5051       171         0  pidstat

5 FAQ

5.1 sar: can't open /var/adm/sa/saXX : No such file or directory

Vous désirez, sous Solaris, utiliser la commande "sar" afin d'effectuer du monitoring ou de l'analyse de performance sur votre serveur, mais quand vous exécutez la commande, vous obtenez une erreur semblable à la suivante :

sar: can't open /var/adm/sa/saXX : No such file or directory

La réponse se trouve dans le manpage de "sadc". Vous devez exécuter la commande suivante, et vous devriez être en mesure d'exécuter la commande sans problème, après avoir exécuté ceci :

Command sadc
su sys -c "/usr/lib/sa/sadc /var/adm/sa/sa`date +%d`"

6 Ressources

http://www.cyberciti.biz/open-source/command-line-hacks/linux-monitor-process-using-pidstat/
  1. ^ http://comments.gmane.org/gmane.comp.gnu.coreutils.general/904