O pidstat é uma ferramenta de monitoramento, que torna possível acompanhar cada processo individualmente no Linux.
Pidstat quer dizer PID (Process ID) Statistics.
A ferramenta fornece várias informações, o que inclui o uso da CPU pelo proceso, o uso do disco e estatísticas de uso das threads associadas as tarefas executadas por cada processo.
Para poder executar este comando, você precisa instalar o pacote de ferramentas sysstat.
Ao final do texto, relacionei alguns links interessantes, caso você queira se aprofundar no assunto.
A caixa de pesquisa do site, no topo, à direita também pode ajudar você a encontrar outros artigos interessantes. Boa leitura!
Como instalar o sysstat
Usuários do Red Hat, Fedora ou outras distro baseadas nestas, podem usar o yum:
yum install sysstat
Quem for usuário do Debian, do Ubuntu, Mint etc. pode usar o apt-get:
sudo apt-get install sysstat
Ou o aptitude (padrão no Debian):
sudo aptitude install sysstat
Feito a instalação, vamos as dicas de uso…
Como ver estatísticas de TODOS os processos em execução
Para obter as estatísticas referentes a todos os processos use a opção -p ALL
(note as maiúsculas), tal como você pode observar no exemplo abaixo.
pidstat -p ALL
Linux 3.13.0-39-generic (case-530U3C-530U4C-532U3C) 25-11-2014 _x86_64_ (4 CPU) 16:06:47 UID PID %usr %system %guest %CPU CPU Command 16:06:47 0 1 0,00 0,00 0,00 0,01 3 init 16:06:47 0 2 0,00 0,00 0,00 0,00 0 kthreadd 16:06:47 0 3 0,00 0,00 0,00 0,00 0 ksoftirqd/0 16:06:47 0 5 0,00 0,00 0,00 0,00 0 kworker/0:0H 16:06:47 0 7 0,00 0,03 0,00 0,03 3 rcu_sched ... 16:06:47 0 29597 0,00 0,00 0,00 0,00 3 kworker/3:1H 16:06:47 0 29599 0,00 0,00 0,00 0,00 3 irq/43-mei_me 16:06:47 0 31144 0,00 0,00 0,00 0,00 2 kworker/u16:1 16:06:47 0 31290 0,00 0,00 0,00 0,00 2 kworker/u17:1 16:06:47 0 31448 0,00 0,00 0,00 0,00 2 kworker/2:0
Acima, você pode observar as informações de uso da CPU para todos os processos em execução.
Se quiser, pode ver os valores referentes a um processo (PID) em particular:
pidstat -p 29597
Linux 3.13.0-39-generic (case-530U3C-530U4C-532U3C) 25-11-2014 _x86_64_ (4 CPU) 16:19:48 UID PID %usr %system %guest %CPU CPU Command 16:19:48 0 29597 0,00 0,00 0,00 0,00 3 kworker/3:1H
Se você é novato com o pacote sysstat, dê uma olhada no comando sar — que ajuda a entender estatísticas de performance.
O PID (identificador de processos ou process ID) é um número que os kernels dos sistemas operacionais — tais como o Mac OS X, Windows, Linux, UNIX etc. — usam para identificar cada processo.
Cada processo em execução no seu sistema tem um PID exlusivo.
A partir desta ID, é possível manipular um processo através de funções internas de aplicativos ou na linha de comando.
Como listar estatísticas de performance baseado no nome do processo
Para resolver este problema, use a opção do comando -C
.
pidstat -C apache
Linux 3.13.0-39-generic (case-530U3C-530U4C-532U3C) 25-11-2014 _x86_64_ (4 CPU) 17:10:42 UID PID %usr %system %guest %CPU CPU Command 17:10:42 0 1342 0,00 0,00 0,00 0,00 2 apache2
O exemplo acima exibe as informações pros processos que cujos nomes contenham a palavra Apache. Experimente outras palavras.
Como repetir periodicamente a saída do comando
Para repetir um comando, dentro de um intervalo, acrescente um número correspondente às vezes em segundos.
Vamos reusar o exemplo anterior. Ao acrescentar o valor 1, ele passará a repetir o comando a cada 1 segundo. Veja:
pidstat -C apache 1
17:44:29 UID PID %usr %system %guest %CPU CPU Command 17:44:30 UID PID %usr %system %guest %CPU CPU Command 17:44:31 0 1342 0,00 1,00 0,00 1,00 2 apache2
Experimente outros valores. Use as teclas Ctrl + C
para parar o comando.
Como exibir estatísticas de Entrada/Saída de processos
Para exibir o relatório estatístico de Entrada/Saída de um determinado processo, a cada 1 segundo, use a opção -d, da seguinte forma:
pidstat -p 10993 -d 1
Linux 3.13.0-39-generic (case-530U3C-530U4C-532U3C) 25-11-2014 _x86_64_(4 CPU) 19:41:19 UID PID kB_rd/s kB_wr/s kB_ccwr/s Command 19:41:20 1000 10993 0,00 96,00 0,00 firefox 19:41:21 1000 10993 0,00 0,00 0,00 firefox 19:41:22 1000 10993 0,00 128,00 0,00 firefox 19:41:23 1000 10993 0,00 256,00 0,00 firefox 19:41:24 1000 10993 0,00 160,00 0,00 firefox 19:41:25 1000 10993 0,00 160,00 0,00 firefox 19:41:26 1000 10993 0,00 160,00 0,00 firefox 19:41:27 1000 10993 0,00 128,00 0,00 firefox ^C Média: 1000 10993 0,00 136,00 0,00 firefox
Entre os itens exibidos, estão o PID — informado na linha de comando, as taxas de leitura e gravação no disco em Kb/s etc.
Como mostrar atividades de paginação para processos específicos
A paginação é uma das técnicas permitidas pela gestão de memória no sistema.
Com a paginação, o computador armazena e recupera dados do sistema secundário de armazenamento para usar na memória principal.
A paginação permite que dados sejam armazenados “fragmentados” em disco e organizados contiguamente na memória principal, para uso imediato.
É parte importante da implementação da memória virtual.
Aqui, entra em uso a opção -r, conforme o exemplo abaixo, para exibir falhas de paginação e utilização da memória, referentes a uma determinada tarefa (PID). Veja:
pidstat -p 10993 -r 1
Linux 3.13.0-39-generic (case-530U3C-530U4C-532U3C) 25-11-2014 _x86_64_(4 CPU) 19:58:46 UID PID minflt/s majflt/s VSZ RSS %MEM Command 19:58:47 1000 10993 22,00 0,00 1602560 432344 11,55 firefox 19:58:48 1000 10993 36,00 0,00 1602560 432592 11,56 firefox 19:58:49 1000 10993 27,00 0,00 1594364 432728 11,56 firefox 19:58:50 1000 10993 20,00 0,00 1594364 432992 11,57 firefox 19:58:51 1000 10993 27,00 0,00 1594364 432992 11,57 firefox ^C Média: 1000 10993 26,40 0,00 1597642 432730 11,56 firefox
Como exibir comandos em execução e seus argumentos
O comportamento padrão do pidstat é mostrar apenas o nome do comando em execução, sem os detalhes do caminho e dos argumentos e opções dados.
Veja 2 exemplos. No primeiro, vou exibir as estatísticas do navegador Chrome. No segundo as estatística estarão mais detalhadas, com o acréscimo da opção -l:
pidstat -C chrome
Linux 3.13.0-40-generic (case-530U3C-530U4C-532U3C) 26-11-2014 _x86_64_ (4 CPU) 15:28:30 UID PID %usr %system %guest %CPU CPU Command 15:28:30 1000 10651 0,02 0,01 0,00 0,03 0 chrome 15:28:30 1000 10662 0,00 0,00 0,00 0,00 0 chrome 15:28:30 1000 10672 0,00 0,00 0,00 0,00 0 chrome 15:28:30 1000 10691 0,00 0,00 0,00 0,00 3 chrome 15:28:30 1000 10710 0,00 0,00 0,00 0,00 1 chrome 15:28:30 1000 10717 0,00 0,00 0,00 0,00 2 chrome 15:28:30 1000 10728 0,00 0,00 0,00 0,00 3 chrome 15:28:30 1000 10731 0,00 0,00 0,00 0,00 0 chrome 15:28:30 1000 10951 0,00 0,00 0,00 0,00 2 chrome
Agora, veja o comando com a exibição das opções e argumentos de execução, além do caminho completo para chegar ao Chrome:
pidstat -C chrome -l Linux 3.13.0-40-generic (case-530U3C-530U4C-532U3C) 26-11-2014 _x86_64_ (4 CPU) 15:28:17 UID PID %usr %system %guest %CPU CPU Command 15:28:17 1000 10651 0,02 0,01 0,00 0,03 2 /opt/google/chrome/chrome --incognito 15:28:17 1000 10662 0,00 0,00 0,00 0,00 0 /opt/google/chrome/chrome --type=zygote --enable-crash-reporter=BFA8A187-CB5C-B8FF-FDD3-F84DA1B302F1 15:28:17 1000 10672 0,00 0,00 0,00 0,00 3 /opt/google/chrome/chrome --type=zygote --enable-crash-reporter=BFA8A187-CB5C-B8FF-FDD3-F84DA1B302F1 15:28:17 1000 10691 0,00 0,00 0,00 0,00 2 /opt/google/chrome/chrome --type=gpu-process --channel=10651.0.2015679771 --enable-crash-reporter=BFA8A187-CB5C-B8FF-FDD3-F84DA 15:28:17 1000 10710 0,00 0,00 0,00 0,00 1 /opt/google/chrome/chrome --type=renderer --disable-databases --enable-deferred-image-decoding --lang=pt-BR --force-fieldtrials 15:28:17 1000 10717 0,00 0,00 0,00 0,00 3 /opt/google/chrome/chrome --type=renderer --enable-deferred-image-decoding --lang=pt-BR --force-fieldtrials=AutoReloadExperimen 15:28:17 1000 10724 0,00 0,00 0,00 0,00 0 /opt/google/chrome/chrome --type=renderer --enable-deferred-image-decoding --lang=pt-BR --force-fieldtrials=AutoReloadExperimen 15:28:17 1000 10728 0,00 0,00 0,00 0,00 1 /opt/google/chrome/chrome --type=renderer --enable-deferred-image-decoding --lang=pt-BR --force-fieldtrials=AutoReloadExperimen 15:28:17 1000 10731 0,00 0,00 0,00 0,00 1 /opt/google/chrome/chrome --type=renderer --enable-deferred-image-decoding --lang=pt-BR --force-fieldtrials=AutoReloadExperimen
Exibir a saída a intervalos regulares por certo número de vezes
Você já sabe como estabelecer um intervalo, em segundos, para o pidstat fazer sua coleta de informações.
É possível, também, estabelecer um número fixo de vezes em que este processo deve ser repetido — assim, você não precisa interromper com Ctrl + C e ainda tem informações adicionais ao final do relatório.
Basta informar outro valor, ao final da linha de comando (após o número que define o tamanho do intervalo em segundos).
No exemplo, abaixo, o pidstat exibirá os resultados a cada intervalo de 2 segundos, 5 vezes:
pidstat -C chrome -l 2 5 Linux 3.13.0-40-generic (ultra-530U3C-530U4C-532U3C) 26-11-2014 _x86_64_ (4 CPU) ATTENTION: default value of option force_s3tc_enable overridden by environment. 16:06:50 UID PID %usr %system %guest %CPU CPU Command 16:06:52 1000 11471 172,55 28,43 0,00 200,98 0 /opt/google/chrome/chrome 16:06:52 1000 11484 1,96 1,96 0,00 3,92 2 /opt/google/chrome/chrome --type=zygote --enable-crash-reporter=BFA8A187-CB5C-B8FF-FDD3-F84DA1B302F1 16:06:52 1000 11493 0,00 0,49 0,00 0,49 0 /opt/google/chrome/chrome --type=zygote --enable-crash-reporter=BFA8A187-CB5C-B8FF-FDD3-F84DA1B302F1 16:06:52 1000 11512 7,84 4,41 0,00 12,25 3 /opt/google/chrome/chrome --type=gpu-process --channel=11471.0.1175412254 --enable-crash-reporter=BFA8A187-CB5C-B8FF-FDD3-F84DA 16:06:52 UID PID %usr %system %guest %CPU CPU Command 16:06:54 1000 11471 245,00 9,00 0,00 254,00 3 /opt/google/chrome/chrome 16:06:54 1000 11512 7,00 1,50 0,00 8,50 0 /opt/google/chrome/chrome --type=gpu-process --channel=11471.0.1175412254 --enable-crash-reporter=BFA8A187-CB5C-B8FF-FDD3-F84DA 16:06:54 1000 11530 18,00 1,00 0,00 19,00 0 /opt/google/chrome/chrome --type=renderer --enable-deferred-image-decoding --lang=pt-BR --force-fieldtrials=DomRel-Enable/enabl 16:06:54 1000 11537 48,50 3,50 0,00 52,00 3 /opt/google/chrome/chrome --type=renderer --enable-deferred-image-decoding --lang=pt-BR --force-fieldtrials=AutoReloadExperimen 16:06:54 UID PID %usr %system %guest %CPU CPU Command 16:06:56 1000 11471 62,50 9,50 0,00 72,00 1 /opt/google/chrome/chrome 16:06:56 1000 11512 1,50 1,50 0,00 3,00 1 /opt/google/chrome/chrome --type=gpu-process --channel=11471.0.1175412254 --enable-crash-reporter=BFA8A187-CB5C-B8FF-FDD3-F84DA 16:06:56 1000 11530 34,50 2,00 0,00 36,50 2 /opt/google/chrome/chrome --type=renderer --enable-deferred-image-decoding --lang=pt-BR --force-fieldtrials=DomRel-Enable/enabl 16:06:56 1000 11537 63,00 5,00 0,00 68,00 2 /opt/google/chrome/chrome --type=renderer --enable-deferred-image-decoding --lang=pt-BR --force-fieldtrials=AutoReloadExperimen 16:06:56 UID PID %usr %system %guest %CPU CPU Command 16:06:58 1000 11471 15,50 4,00 0,00 19,50 0 /opt/google/chrome/chrome 16:06:58 1000 11512 4,50 2,50 0,00 7,00 0 /opt/google/chrome/chrome --type=gpu-process --channel=11471.0.1175412254 --enable-crash-reporter=BFA8A187-CB5C-B8FF-FDD3-F84DA 16:06:58 1000 11530 4,50 0,00 0,00 4,50 2 /opt/google/chrome/chrome --type=renderer --enable-deferred-image-decoding --lang=pt-BR --force-fieldtrials=DomRel-Enable/enabl 16:06:58 1000 11537 75,00 5,50 0,00 80,50 2 /opt/google/chrome/chrome --type=renderer --enable-deferred-image-decoding --lang=pt-BR --force-fieldtrials=AutoReloadExperimen 16:06:58 UID PID %usr %system %guest %CPU CPU Command 16:07:00 1000 11471 4,00 2,50 0,00 6,50 3 /opt/google/chrome/chrome 16:07:00 1000 11512 5,50 1,00 0,00 6,50 3 /opt/google/chrome/chrome --type=gpu-process --channel=11471.0.1175412254 --enable-crash-reporter=BFA8A187-CB5C-B8FF-FDD3-F84DA 16:07:00 1000 11537 15,00 1,50 0,00 16,50 2 /opt/google/chrome/chrome --type=renderer --enable-deferred-image-decoding --lang=pt-BR --force-fieldtrials=AutoReloadExperimen Média: UID PID %usr %system %guest %CPU CPU Command Média: 1000 11471 100,20 10,76 0,00 110,96 - /opt/google/chrome/chrome Média: 1000 11484 0,40 0,40 0,00 0,80 - /opt/google/chrome/chrome --type=zygote --enable-crash-reporter=BFA8A187-CB5C-B8FF-FDD3-F84DA1B302F1 Média: 1000 11493 0,00 0,10 0,00 0,10 - /opt/google/chrome/chrome --type=zygote --enable-crash-reporter=BFA8A187-CB5C-B8FF-FDD3-F84DA1B302F1 Média: 1000 11512 5,28 2,19 0,00 7,47 - /opt/google/chrome/chrome --type=gpu-process --channel=11471.0.1175412254 --enable-crash-reporter=BFA8A187-CB5C-B8FF-FDD3-F84DA Média: 1000 11530 11,35 0,60 0,00 11,95 - /opt/google/chrome/chrome --type=renderer --enable-deferred-image-decoding --lang=pt-BR --force-fieldtrials=DomRel-Enable/enabl Média: 1000 11537 40,14 3,09 0,00 43,23 - /opt/google/chrome/chrome --type=renderer --enable-deferred-image-decoding --lang=pt-BR --force-fieldtrials=AutoReloadExperimen
Ao final, o pidstat mostra as médias estatísticas.
Como exibir estatísticas de processos específicos e seus descendentes
Use a opção -T para especificar o processo CHILD (descendente, filho) ou as TASKS (tarefas).
No exemplo, as estatísticas serão listadas por tarefas (TASKS) e, se for o caso, com suas descendências (CHILDren).
Opcionalmente, você pode especificar -T ALL
.
Como expor estatísticas de processos dependentes no formato de árvore
Com o uso da opção -t, você pode listar as estatísticas em formato de árvore, conforme exemplo abaixo (estatísticas de uso da CPU do Firefox e suas threads):
pidstat -t -C "firefox" Linux 3.13.0-40-generic (case-530U3C-530U4C-532U3C) 26-11-2014 _x86_64_ (4 CPU) 18:24:59 UID TGID TID %usr %system %guest %CPU CPU Command 18:24:59 1000 2508 - 43,19 2,04 0,00 45,23 1 firefox 18:24:59 1000 - 2508 38,90 1,15 0,00 40,05 1 |__firefox 18:24:59 1000 - 3871 0,00 0,00 0,00 0,00 2 |__firefox
Veja o exemplo com o “mysql”:
pidstat -t -C "mysql"
Note as colunas TGID (thread group leader) e TID (identificação da thread sendo monitorada).
Linux 3.13.0-40-generic (case-530U3C-530U4C-532U3C) 27-11-2014 _x86_64_ (4 CPU) 13:12:39 UID TGID TID %usr %system %guest %CPU CPU Command 13:12:39 117 1244 - 0,04 0,03 0,00 0,08 2 mysqld 13:12:39 117 - 1244 0,00 0,00 0,00 0,00 2 |__mysqld 13:12:39 117 - 1271 0,00 0,00 0,00 0,00 1 |__mysqld 13:12:39 117 - 1272 0,00 0,00 0,00 0,01 0 |__mysqld 13:12:39 117 - 1273 0,00 0,00 0,00 0,00 2 |__mysqld 13:12:39 117 - 1274 0,00 0,00 0,00 0,00 1 |__mysqld 13:12:39 117 - 1275 0,00 0,00 0,00 0,00 1 |__mysqld 13:12:39 117 - 1276 0,00 0,00 0,00 0,00 1 |__mysqld 13:12:39 117 - 1277 0,00 0,00 0,00 0,00 3 |__mysqld 13:12:39 117 - 1278 0,00 0,00 0,00 0,00 0 |__mysqld 13:12:39 117 - 1279 0,00 0,00 0,00 0,00 1 |__mysqld 13:12:39 117 - 1280 0,00 0,00 0,00 0,00 1 |__mysqld 13:12:39 117 - 1329 0,01 0,00 0,00 0,01 3 |__mysqld 13:12:39 117 - 1330 0,02 0,00 0,00 0,02 0 |__mysqld 13:12:39 117 - 1331 0,00 0,00 0,00 0,00 0 |__mysqld 13:12:39 117 - 1671 0,00 0,00 0,00 0,00 1 |__mysqld
Como exibir as informações do pidstat horizontalmente, em uma única linha
Se você pedir ao pidstat para reportar mais de um dado estatístico, o aplicativo irá relacionar um atrás do outro.
No exemplo, que segue, ele vai separar as informações da seguinte forma: exibir primeiro estatísticas de performance para a opção -r; em seguida, a opção -u e, por fim, a opção -d.
pidstat -rud
Contudo, se você desejar ver todas estas informações em uma única linha para cada processo individual, use a opção -h:
pidstat -rud -h | head
Linux 3.13.0-40-generic (case-530U3C-530U4C-532U3C) 27-11-2014 _x86_64_ (4 CPU) # Time UID PID %usr %system %guest %CPU CPU minflt/s majflt/s VSZ RSS %MEM kB_rd/s kB_wr/s kB_ccwr/s Command 1417106085 0 1 0,01 0,01 0,00 0,02 0 4,26 0,00 33904 3188 0,09 -1,00 -1,00 -1,00 init 1417106085 0 3 0,00 0,00 0,00 0,00 0 0,00 0,00 0 0 0,00 -1,00 -1,00 -1,00 ksoftirqd/0 1417106085 0 7 0,00 0,03 0,00 0,03 2 0,00 0,00 0 0 0,00 -1,00 -1,00 -1,00 rcu_sched 1417106085 0 8 0,00 0,02 0,00 0,02 1 0,00 0,00 0 0 0,00 -1,00 -1,00 -1,00 rcuos/0 1417106085 0 9 0,00 0,01 0,00 0,01 2 0,00 0,00 0 0 0,00 -1,00 -1,00 -1,00 rcuos/1 1417106085 0 10 0,00 0,01 0,00 0,01 3 0,00 0,00 0 0 0,00 -1,00 -1,00 -1,00 rcuos/2 1417106085 0 11 0,00 0,01 0,00 0,01 1 0,00 0,00 0 0 0,00 -1,00 -1,00 -1,00 rcuos/3
Divirta-se! Compartilhe a nerdice e comente!
Referências:
- Conheça estas outras ferramentas do SYSSTAT.
- http://sebastien.godard.pagesperso-orange.fr/changelog.html — Sysstat – site oficial (english).
- http://pt.wikipedia.org/wiki/Yum
- Wikipedia – Process Identifier
- http://en.wikipedia.org/wiki/Paging
- http://www.thegeekstuff.com/2014/11/pidstat-examples/ — tutorial do Natarajan (english).