Linux: Outils de monitoring/performances

De TechWik
Aller à : navigation, rechercher

Processeur/mémoire

ps

Outil de base, permet de choisir ce qu'on veut afficher, par exemple:

 $ ps -e -o pid,euid,egid,cmd:50,pcpu,size,vsz,share |grep firefox | grep -v grep
   PID  EUID  EGID CMD                                                %CPU  SIZE    VSZ -
 ...
 20881  1000  1000 /opt/firefox/firefox                                3.7 8445232 9673364 -
 21053  1000  1000 /opt/firefox/firefox -contentproc -childID 2 -isFo  0.1 1317140 2099840 -

Top

Outil de base, top donne les performances globales, ou par coeur. Commandes intéressantes:

  • 1 : bascule stats globales / par coeur.

Options intéressantes:

  • -b -n 1 : cliché one-shot de tous les process.

Htop (EPEL)

Similaire à top, un peu plus visuel et permet de scroller verticalement et horizontalement, fonctionnalités moindres par rapport à top.

sar

 $ sar -u 5 12 -P ALL 
 Linux 3.10.0-693.17.1.el7.x86_64 (lxhpi3.home)  04/02/2018      _x86_64_        (4 CPU)
 16:30:38        CPU     %user     %nice   %system   %iowait    %steal     %idle
 16:30:43        all      2,59      0,00      1,59      0,10      0,00     95,72
 16:30:43          0      2,80      0,00      1,20      0,40      0,00     95,60
 ...

Entrées/Sorties (réseau, disque...)

Iotop

Mesure l'activité disque par process. Peut fonctionner comme top soit en continu à l'écran soit en mode batch (pour sauver dans un fichier). Exemple (affichage seulement des process ayant de l'activité disque):

 Total DISK READ :       3.79 K/s | Total DISK WRITE :     352.81 K/s
 Actual DISK READ:       3.79 K/s | Actual DISK WRITE:       7.59 K/s
   TID  PRIO  USER     DISK READ  DISK WRITE  SWAPIN      IO    COMMAND
 20914 be/4 toine       3.79 K/s   15.17 K/s  0.00 %  0.71 % firefox [Cache2 I/O]
  1008 be/4 root        0.00 B/s    0.00 B/s  0.00 %  0.01 % X :0 -background none -noreset -audit 4 -verbose -auth /run/gdm/auth-for-gdm-qmCecJ/database -seat seat0 -nolisten tcp vt1
  4296 be/4 toine       0.00 B/s   15.17 K/s  0.00 %  0.00 % kdeinit4: konsole [kdeinit]
 21001 be/4 toine       0.00 B/s  307.29 K/s  0.00 %  0.00 % firefox [mozStorage #1]
 21009 be/4 toine       0.00 B/s   15.17 K/s  0.00 %  0.00 % firefox [DOM Worker]

Iftop

iftop donne des stats de débit par destination sur une ou toutes les interfaces:

 $ sudo iftop -i ens0
  # Host name (port/service if enabled)            last 2s   last 10s   last 40s cumulative
 --------------------------------------------------------------------------------------------
  1 lxhpi3.home                              =>     14,6Kb     4,13Kb     2,90Kb     5,79KB
    imap.free.fr                             <=      725Kb      146Kb     91,8Kb      184KB
  2 lxhpi3.home                              =>         0b     4,10Kb     2,56Kb     5,12KB
    2400:cb00:2048:1::6810:2802              <=         0b     66,3Kb     41,4Kb     82,9KB
  3 lxhpi3.home                              =>     22,5Kb     9,02Kb     5,63Kb     11,3KB
    server-13-32-153-141.cdg54.r.cloudfront  <=      189Kb     46,2Kb     28,9Kb     57,7KB

nstat / rtacct

nstat, rtacct - network statistics tools (package iproute).

  nstat [ -h?vVzrnasd:t: ] [ PATTERN [ PATTERN ] ]
  rtacct [ -h?vVzrnasd:t: ] [ ListOfRealms ]

iostat

Report Central Processing Unit (CPU) statistics and input/output statistics for devices and partitions.

 $ iostat
 Linux 3.10.0-693.17.1.el7.x86_64 (lxhpi3.home)  04/02/2018      _x86_64_        (4 CPU)
 avg-cpu:  %user   %nice %system %iowait  %steal   %idle
            5,61    0,03    1,89    0,42    0,00   92,04
 Device:            tps    kB_read/s    kB_wrtn/s    kB_read    kB_wrtn
 sda               2,74        53,83        43,67    4889756    3967316
 dm-0              3,13         4,65         7,91     421992     718364
 dm-1              0,00         0,02         0,00       2120          0
 $ iostat -x sda
 Device:         rrqm/s   wrqm/s     r/s     w/s    rkB/s    wkB/s avgrq-sz avgqu-sz   await r_await w_await  svctm  %util
 sda               1,03     1,81    1,54    1,20    53,76    43,63    71,09     0,08   28,14   10,27   51,04   2,79   0,76

sar

Collect, report, or save system activity information. Appliqué aux interfaces réseau

 $ sar -u 5 1 -n DEV
 Linux 3.10.0-693.17.1.el7.x86_64 (lxhpi3.home)  04/02/2018      _x86_64_        (4 CPU)
 16:34:49        CPU     %user     %nice   %system   %iowait    %steal     %idle
 16:34:54        all      5,61      0,00      2,73      0,25      0,00     91,41
 #
 16:34:49        IFACE   rxpck/s   txpck/s    rxkB/s    txkB/s   rxcmp/s   txcmp/s  rxmcst/s
 16:34:54    wlp0s26u1u4    487,20    265,40    612,56     27,85      0,00      0,00      0,00
 #
 16:34:49        IFACE   rxerr/s   txerr/s    coll/s  rxdrop/s  txdrop/s  txcarr/s  rxfram/s  rxfifo/s  txfifo/s
 16:34:54    wlp0s26u1u4      0,00      0,00      0,00      0,00      0,00      0,00      0,00      0,00      0,00

tracer les messages reseau sur un PID avec strace

Par exemple, avec l'option -f pour suivre la trace sur les process fils du process en trace:

 $ strace -v -f -e trace=network -p 4300
 strace: Process 4300 attached                                                                                                                                    
 socket(AF_NETLINK, SOCK_RAW, NETLINK_AUDIT) = 3                                                                                                                  
 sendmsg(3, {msg_name(12)={sa_family=AF_NETLINK, pid=0, groups=00000000}, msg_iov(2)=[{"\35\0\0\0d\4\1\0\0\0\0\0\0\0\0\0", 16}, {"ping 8.8.8.8\0", 13}], msg_controllen=0, msg_flags=0}, 0) = 29                                                                                                                                   
 strace: Process 23396 attached                                                                                                                                   
 [pid 23396] socket(AF_INET, SOCK_DGRAM, IPPROTO_ICMP) = -1 EACCES (Permission denied)                                                                            
 [pid 23396] socket(AF_INET, SOCK_RAW, IPPROTO_ICMP) = 3                                                                                                          
 [pid 23396] socket(AF_INET, SOCK_DGRAM, IPPROTO_IP) = 4                                                                                                          
 [pid 23396] connect(4, {sa_family=AF_INET, sin_port=htons(1025), sin_addr=inet_addr("8.8.8.8")}, 16) = 0                                                         
 [pid 23396] getsockname(4, {sa_family=AF_INET, sin_port=htons(58430), sin_addr=inet_addr("192.168.1.16")}, [16]) = 0                                             
 [pid 23396] setsockopt(3, SOL_RAW, ICMP_FILTER, ~(1<<ICMP_ECHOREPLY|1<<ICMP_DEST_UNREACH|1<<ICMP_SOURCE_QUENCH|1<<ICMP_REDIRECT|1<<ICMP_TIME_EXCEEDED|1<<ICMP_PARAMETERPROB), 4) = 0                                                                                                                                              
 [pid 23396] setsockopt(3, SOL_IP, IP_RECVERR, [1], 4) = 0
 [pid 23396] setsockopt(3, SOL_SOCKET, SO_SNDBUF, [324], 4) = 0
 [pid 23396] setsockopt(3, SOL_SOCKET, SO_RCVBUF, [65536], 4) = 0
 [pid 23396] getsockopt(3, SOL_SOCKET, SO_RCVBUF, [131072], [4]) = 0
 [pid 23396] setsockopt(3, SOL_SOCKET, SO_TIMESTAMP, [1], 4) = 0
 [pid 23396] setsockopt(3, SOL_SOCKET, SO_SNDTIMEO, "\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0", 16) = 0
 [pid 23396] setsockopt(3, SOL_SOCKET, SO_RCVTIMEO, "\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0", 16) = 0
 [pid 23396] sendto(3, "\10\0\33\21[d\0\1\237\10wZ\0\0\0\0\242S\n\0\0\0\0\0\20\21\22\23\24\25\26\27"..., 64, 0, {sa_family=AF_INET, sin_port=htons(0), sin_addr=inet_addr("8.8.8.8")}, 16) = 64
 [pid 23396] recvmsg(3, {msg_name(16)={sa_family=AF_INET, sin_port=htons(0), sin_addr=inet_addr("8.8.8.8")}, msg_iov(1)=[{"E\0\0T\321\360\0\0;\1\333\360\10\10\10\10\300\250\1\20\0\0#\21[d\0\1\237\10wZ"..., 192}], msg_controllen=32, [{cmsg_len=32, cmsg_level=SOL_SOCKET, cmsg_type=0x1d /* SCM_??? */}], msg_flags=0}, 0) = 84
 [pid 23396] --- SIGINT {si_signo=SIGINT, si_code=SI_KERNEL} ---
[pid 23396] +++ exited with 0 +++
--- SIGCHLD {si_signo=SIGCHLD, si_code=CLD_EXITED, si_pid=23396, si_uid=1000, si_status=0, si_utime=0, si_stime=0} ---

outils eBPF (kernel > 4.2)

Voir ces mécanismes : https://opensource.com/article/17/11/bccbpf-performance