Jan 192013
 

Quando qualcosa va storto sul vostro server Linux o desktop, è importante capire quale processo sta prendendo tutte le risorse, in passato ho pubblicato alcune informazioni su top e htop, due grandi strumenti per avere una panoramica generale del sistema con un solo colpo d’occhio, ma a volte è necessario raccogliere più informazioni su un particolare processo e per questo compito il comando pidstat è perfetto.

Pidstat è uno strumento statistico per Linux che fa parte delle utility sysstat. Il comando pidstat è usato per monitorare le singole attività attualmente gestite dal kernel di Linux. Scrive le attività su standard output per ogni processo selezionato con l’opzione -p, oppure per ogni attività gestita dal kernel Linux, se l’opzione -p ALL è stata utilizzata. Se non si seleziona alcuna attività equivale a specificare -p ALL, ma solo i task attivi (attività statistiche con valori diversi da zero) appariranno nel report.
È possibile utilizzare PID e anche espressioni regolari sui nomi dei processi per fare dei filtri su ciò che si desidera visualizzare..

Uso Base

Il modo più semplice per utilizzare pidstat è con l’opzione -p ALL, questo stamperà sullo schermo un elenco di tutti i processi in esecuzione e le risorse che stanno utilizzando:

#pidstat -p ALL
Linux 3.6.5   	01/19/13 	_i686_	(4 CPU)
 
19:03:10          PID    %usr %system  %guest    %CPU   CPU  Command
19:03:10            1    0.00    0.00    0.00    0.00     1  init
19:03:10            2    0.00    0.00    0.00    0.00     1  kthreadd
19:03:10            3    0.00    0.00    0.00    0.00     0  ksoftirqd/0
19:03:10            4    0.00    0.00    0.00    0.00     0  kworker/0:0
19:03:10            5    0.00    0.00    0.00    0.00     0  kworker/0:0H
19:03:10            6    0.00    0.00    0.00    0.00     1  kworker/u:0
19:03:10            7    0.00    0.00    0.00    0.00     0  kworker/u:0H
19:03:10            8    0.00    0.00    0.00    0.00     0  migration/0
19:03:10            9    0.00    0.00    0.00    0.00     1  migration/1
19:03:10           10    0.00    0.00    0.00    0.00     1  kworker/1:0
19:03:10           11    0.00    0.00    0.00    0.00     1  kworker/1:0H
19:03:10           12    0.00    0.00    0.00    0.00     1  ksoftirqd/1
19:03:10           13    0.00    0.00    0.00    0.00     2  migration/2
19:03:10           14    0.00    0.00    0.00    0.00     2  kworker/2:0
19:03:10           15    0.00    0.00    0.00    0.00     2  kworker/2:0H
19:03:10           16    0.00    0.00    0.00    0.00     2  ksoftirqd/2
19:03:10           17    0.00    0.00    0.00    0.00     3  migration/3
19:03:10           18    0.00    0.00    0.00    0.00     3  kworker/3:0
19:03:10           19    0.00    0.00    0.00    0.00     3  kworker/3:0H
.....
19:03:10          293    0.00    0.00    0.00    0.00     1  nfsiod
19:03:10          294    0.00    0.00    0.00    0.00     1  cifsiod
19:03:10          297    0.00    0.00    0.00    0.00     1  jfsIO
19:03:10          298    0.00    0.00    0.00    0.00     1  jfsCommit
19:03:10          302    0.00    0.00    0.00    0.00     1  jfsSync
19:03:10          303    0.00    0.00    0.00    0.00     1  xfsalloc
19:03:10          304    0.00    0.00    0.00    0.00     1  xfs_mru_cache
19:03:10          305    0.00    0.00    0.00    0.00     1  xfslogd
19:03:10          306    0.00    0.00    0.00    0.00     1  glock_workqueue
19:03:10          307    0.00    0.00    0.00    0.00     1  delete_workqueu
19:03:10          308    0.00    0.00    0.00    0.00     1  gfs_recovery
19:03:10          309    0.00    0.00    0.00    0.00     1  crypto
19:03:10          873    0.00    0.00    0.00    0.00     2  khvcd
19:03:10          965    0.00    0.01    0.00    0.01     0  kworker/0:1H
19:03:10          992    0.00    0.00    0.00    0.00     3  kpsmoused
19:03:10         1030    0.00    0.00    0.00    0.00     3  deferwq
19:03:10         1033    0.00    0.00    0.00    0.00     0  kjournald
19:03:10         1036    0.00    0.00    0.00    0.00     0  kworker/0:1
19:03:10         1069    0.00    0.00    0.00    0.00     0  udevd
19:03:10         1106    0.00    0.00    0.00    0.00     3  kworker/3:1
19:03:10         2039    0.00    0.00    0.00    0.00     0  dhcpcd-bin
19:03:10         2149    0.00    0.00    0.00    0.00     0  rsyslogd
19:03:10         2174    0.00    0.00    0.00    0.00     0  atd
19:03:10         2188    0.00    0.00    0.00    0.00     1  monit
19:03:10         2206    0.00    0.00    0.00    0.00     0  cron
19:03:10         2215    0.00    0.00    0.00    0.00     1  dropbear
19:03:10         2260    0.00    0.00    0.00    0.00     1  mysqld_safe
19:03:10         2416    0.16    0.08    0.00    0.23     2  mysqld
19:03:10         2417    0.00    0.00    0.00    0.00     3  logger
19:03:10         2419    0.00    0.00    0.00    0.00     2  php5-fpm
19:03:10         2425    0.00    0.09    0.00    0.09     2  flush-202:0
19:03:10         2471    0.00    0.00    0.00    0.01     1  ntpd
19:03:10         2523    0.00    0.00    0.00    0.00     1  mingetty
19:03:10         2694    0.00    0.00    0.00    0.00     2  kworker/2:1H
19:03:10         2734    0.00    0.00    0.00    0.00     3  kworker/3:1H
19:03:10         2736    0.00    0.00    0.00    0.00     1  kworker/1:1H
19:03:10         2776    0.00    0.00    0.00    0.00     0  jbd2/xvdc1-8
19:03:10         2777    0.00    0.00    0.00    0.00     3  ext4-dio-unwrit
19:03:10         3526    0.00    0.00    0.00    0.00     2  varnishd
19:03:10         3527    0.00    0.00    0.00    0.01     1  varnishd
19:03:10         4972    0.02    0.00    0.00    0.03     3  php5-fpm
19:03:10         4977    0.03    0.00    0.00    0.03     0  php5-fpm
19:03:10         4992    0.02    0.00    0.00    0.02     1  php5-fpm
19:03:10         5087    0.01    0.00    0.00    0.01     0  php5-fpm
19:03:10         5091    0.01    0.00    0.00    0.02     3  php5-fpm

Intervallo di tempo

Come si può vedere il comando precedente stampa un elenco molto lungo con tutti i processi, a volte utile ma forse si vuole solo sapere quali processi stanno usando le risorse in questo momento e per questo compito è molto meglio utilizzare pidstat con un numero come opzione, questo numero indica la quantità di tempo in secondi tra ogni rapporto.

# pidstat 1
Linux 3.6.5 	01/19/13 	_i686_	(4 CPU)
 
19:22:28          PID    %usr %system  %guest    %CPU   CPU  Command
19:22:29         5725    0.00    0.99    0.00    0.99     0  pidstat
19:22:29        30634    1.98    0.00    0.00    1.98     0  nginx
 
19:22:29          PID    %usr %system  %guest    %CPU   CPU  Command
19:22:30        30634    4.00    0.00    0.00    4.00     0  nginx
 
19:22:30          PID    %usr %system  %guest    %CPU   CPU  Command
19:22:31         2416    3.00    1.00    0.00    4.00     2  mysqld
19:22:31         3527    0.00    1.00    0.00    1.00     2  varnishd
19:22:31         4977   14.00    2.00    0.00   16.00     3  php5-fpm
19:22:31         4992   26.00    3.00    0.00   29.00     1  php5-fpm
19:22:31         5685   13.00    2.00    0.00   15.00     0  php5-fpm
19:22:31         5725    1.00    1.00    0.00    2.00     1  pidstat
19:22:31        30634    1.00    0.00    0.00    1.00     0  nginx
 
19:22:31          PID    %usr %system  %guest    %CPU   CPU  Command
19:22:32          965    0.00    1.00    0.00    1.00     0  kworker/0:1H
19:22:32         2416    1.00    1.00    0.00    2.00     2  mysqld
19:22:32         4977    1.00    0.00    0.00    1.00     3  php5-fpm
19:22:32         5093   34.00    3.00    0.00   37.00     0  php5-fpm
19:22:32         5685   15.00    2.00    0.00   17.00     2  php5-fpm



Questo rapporto è molto meglio in quanto mostra solo i processi il cui utilizzo di risorse cambia tra l’intervallo di tempo specificato.
È inoltre possibile specificare un secondo numero come parametro di conteggio. Questo valore determina il numero di report generati con l’intervallo specificato. Se il parametro intervallo è specificato senza il parametro di conteggio, il comando pidstat genera report continuamente.

Specificare quale tipo di risorse che si desidera monitorare

Finora non abbiamo specificato quale tipo di risorsa ci interessa, e così come default pidstat mostra informazioni sull’utilizzo della CPU, ma questo software è in grado di darci molte più informazioni utilizzando queste opzioni:

  • -d Fornisce statistiche su I/O.
  • -r Segnala errori sulle pagine e l’utilizzo della memoria.
  • -u Fornisce informazioni sulla CPU

È inoltre possibile specificare più risorse, quindi è possibili visualizzare le informazioni su CPU e memoria utilizzando il comando:

# pidstat 2 2 -u -r
Linux 3.6.5	01/19/13 	_i686_	(4 CPU)
 
19:51:08          PID    %usr %system  %guest    %CPU   CPU  Command
19:51:10         2416    1.00    1.00    0.00    1.99     0  mysqld
19:51:10         5091   35.32    0.00    0.00   35.32     2  php5-fpm
19:51:10         5937    0.00    0.50    0.00    0.50     0  pidstat
 
19:51:08          PID  minflt/s  majflt/s     VSZ    RSS   %MEM  Command
19:51:10         2416    193.53      0.00   89296  32156   6.33  mysqld
19:51:10         3527      2.99      0.00  314384  29084   5.72  varnishd
19:51:10         5091    191.04      0.00  166464  59596  11.73  php5-fpm
19:51:10         5937    101.00      0.00    1768    748   0.15  pidstat
 
19:51:10          PID    %usr %system  %guest    %CPU   CPU  Command
19:51:12         3527    0.00    0.50    0.00    0.50     1  varnishd
19:51:12         5728    4.50    0.00    0.00    4.50     0  php5-fpm
19:51:12         5937    0.00    0.50    0.00    0.50     0  pidstat
 
19:51:10          PID  minflt/s  majflt/s     VSZ    RSS   %MEM  Command
19:51:12         3527      4.00      0.50  314384  29084   5.72  varnishd
19:51:12         5728     16.00      0.00  165664  59260  11.66  php5-fpm
19:51:12         5937    104.50      0.00    1768    784   0.15  pidstat
 
Average:          PID    %usr %system  %guest    %CPU   CPU  Command
Average:         2416    0.50    0.50    0.00    1.00     -  mysqld
Average:         3527    0.00    0.25    0.00    0.25     -  varnishd
Average:         5091   17.71    0.00    0.00   17.71     -  php5-fpm
Average:         5728    2.24    0.00    0.00    2.24     -  php5-fpm
Average:         5937    0.00    0.50    0.00    0.50     -  pidstat
 
Average:          PID  minflt/s  majflt/s     VSZ    RSS   %MEM  Command
Average:         2416     97.01      0.00   89296  32156   6.33  mysqld
Average:         3527      3.49      0.25  314384  29084   5.72  varnishd
Average:         5091     95.76      0.00  166464  59596  11.73  php5-fpm
Average:         5728      7.98      0.00  165664  59222  11.65  php5-fpm
Average:         5937    102.74      0.00    1768    766   0.15  pidstat

Mostrare solo alcuni processi

Finora abbiamo analizzato tutti i processi in esecuzione, ma forse si desidera monitorare solo un processo specifico, per fare questo è possibile utilizzare il flag -p con un numero PID o utilizzare l’opzione -C con una stringa, questa mostra solo le attività dei processi il cui comando contiene la stringa specificata.

# pidstat -C mysql        
Linux 3.6.5	01/19/13 	_i686_	(4 CPU)
 
20:12:40          PID    %usr %system  %guest    %CPU   CPU  Command
20:12:40         2260    0.00    0.00    0.00    0.00     1  mysqld_safe
20:12:40         2416    0.16    0.08    0.00    0.23     3  mysqld

È possibile combinare il parametro -C con tutti gli altri, in modo da poter scegliere un intervallo di tempo o che tipo di risorsa visualizzare.

Popular Posts:

Flattr this!

  One Response to “Linux Terminal: pidstat, sapere tutto sui processi”

  1. Thank you for this nice article, but why doesn’t the htop link to this article? – http://linuxaria.com/article/monitoring-process-top-htop

 Leave a Reply

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

(required)

(required)

*