Como examinar processos em execução no Linux

Como examinar processos em execução no Linux

Por José Carlos Palma

Existem várias maneiras de analisar os processos em execução nos sistemas Linux – para ver o que está sendo executado, os recursos que os processos estão usando, como o sistema é afectado pela carga e como a memória está sendo usada. Cada comando fornece uma visão diferente e o intervalo de detalhes é considerável. Neste artigo, executaremos uma série de comandos que podem ajudá-lo a visualizar os detalhes do processo de várias maneiras diferentes.

ps
Embora o comando ps seja o comando mais óbvio para examinar processos, os argumentos que você usa ao executar o ps farão uma grande diferença em quanta informação será fornecida. Sem argumentos, o ps mostrará apenas os processos associados à sua sessão de login actual. Adicione -u e você verá detalhes estendidos.

Aqui está uma comparação:

nemo$ ps
    PID TTY          TIME CMD
  45867 pts/1    00:00:00 bash
  46140 pts/1    00:00:00 ps
nemo$ ps -u
USER         PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
nemo       45867  0.0  0.0  11232  5636 pts/1    Ss   19:04   0:00 -bash
nemo       46141  0.0  0.0  11700  3648 pts/1    R+   19:16   0:00 ps -u

O uso do ps -ef exibirá detalhes de todos os processos em execução no sistema, mas o ps -eF adicionará alguns detalhes adicionais.
$ ps -ef | head -2
UID          PID    PPID  C STIME TTY          TIME CMD
root           1       0  0 May10 ?        00:00:06 /sbin/init splash
$ ps -eF | head -2
UID          PID    PPID  C    SZ   RSS PSR STIME TTY          TIME CMD
root           1       0  0 42108 12524   0 May10 ?        00:00:06 /sbin/init splash

Ambos os comandos mostram quem está executando o processo, os IDs do processo e do processo pai, o horário de início do processo, o tempo de execução acumulado e a tarefa que está sendo executada. Os campos adicionais mostrados quando você usa F em vez de f incluem:

  • SZ: o tamanho do processo em páginas físicas para a imagem principal do processo
  • RSS: o tamanho do conjunto residente que mostra quanta memória é alocada para as partes do processo na RAM. Ele não inclui a memória trocada, mas inclui a memória das bibliotecas compartilhadas, desde que as páginas dessas bibliotecas estejam atualmente na memória. Ele também inclui pilha e memória de pilha.
    PSR: o processador que o processo está usando

ps -fU

Você pode listar processos para algum usuário específico com um comando como “ps -ef | grep USERNAME”, mas com o comando ps -fU, você verá consideravelmente mais dados. Isso ocorre porque os detalhes dos processos que estão sendo executados em nome do usuário também estão incluídos. De fato, quase todos esses processos mostrados foram iniciados pelo sistema simplesmente para apoiar a sessão on-line desse usuário. O Nemo acabou de fazer login e ainda não está executando nenhum comando ou script.

$ ps -fU nemo
UID          PID    PPID  C STIME TTY          TIME CMD
nemo       45726       1  0 19:04 ?        00:00:00 /lib/systemd/systemd --user
nemo       45732   45726  0 19:04 ?        00:00:00 (sd-pam)
nemo       45738   45726  0 19:04 ?        00:00:00 /usr/bin/pulseaudio --daemon
nemo       45740   45726  0 19:04 ?        00:00:00 /usr/libexec/tracker-miner-f
nemo       45754   45726  0 19:04 ?        00:00:00 /usr/bin/dbus-daemon --sessi
nemo       45829   45726  0 19:04 ?        00:00:00 /usr/libexec/gvfsd
nemo       45856   45726  0 19:04 ?        00:00:00 /usr/libexec/gvfsd-fuse /run
nemo       45862   45706  0 19:04 ?        00:00:00 sshd: nemo@pts/1
nemo       45864   45726  0 19:04 ?        00:00:00 /usr/libexec/gvfs-udisks2-vo
nemo       45867   45862  0 19:04 pts/1    00:00:00 -bash
nemo       45878   45726  0 19:04 ?        00:00:00 /usr/libexec/gvfs-afc-volume
nemo       45883   45726  0 19:04 ?        00:00:00 /usr/libexec/gvfs-goa-volume
nemo       45887   45726  0 19:04 ?        00:00:00 /usr/libexec/goa-daemon
nemo       45895   45726  0 19:04 ?        00:00:00 /usr/libexec/gvfs-mtp-volume
nemo       45896   45726  0 19:04 ?        00:00:00 /usr/libexec/goa-identity-se
nemo       45903   45726  0 19:04 ?        00:00:00 /usr/libexec/gvfs-gphoto2-vo
nemo       45946   45726  0 19:04 ?        00:00:00 /usr/libexec/gvfsd-metadata

Observe que o único processo com um TTY atribuído é o shell do Nemo e que o pai de todos os outros processos é systemd.

Você pode fornecer uma lista de nomes de usuário separados por vírgula, em vez de um único nome. Apenas esteja preparado para analisar um pouco mais de dados.

top e ntop

Os comandos top e ntop ajudarão quando você tiver uma idéia de quais processos estão usando mais recursos e permitirão reordenar sua visualização, dependendo de quais critérios você deseja usar para classificar os processos (por exemplo, maior uso de CPU ou memória).

top - 11:51:27 up 1 day, 21:40,  1 user,  load average: 0.08, 0.02, 0.01
Tasks: 211 total,   1 running, 210 sleeping,   0 stopped,   0 zombie
%Cpu(s):  5.0 us,  0.5 sy,  0.0 ni, 94.3 id,  0.2 wa,  0.0 hi,  0.0 si,  0.0 st
MiB Mem :   5944.4 total,   3527.4 free,    565.1 used,   1851.9 buff/cache
MiB Swap:   2048.0 total,   2048.0 free,      0.0 used.   5084.3 avail Mem

    PID USER      PR  NI    VIRT    RES    SHR S  %CPU  %MEM     TIME+ COMMAND
    999 root      20   0  394660  14380  10912 S   8.0   0.2   0:46.54 udisksd
  65224 shs       20   0  314268   9824   8084 S   1.7   0.2   0:00.34 gvfs-ud+
   2034 gdm       20   0  314264   9820   7992 S   1.3   0.2   0:06.25 gvfs-ud+
  67909 root      20   0       0      0      0 I   0.3   0.0   0:00.09 kworker+
      1 root      20   0  168432  12532   8564 S   0.0   0.2   0:09.93 systemd
      2 root      20   0       0      0      0 S   0.0   0.0   0:00.02 kthreadd

/proc

Uma quantidade enorme de informações está disponível nos processos em execução no diretório / proc. De fato, se você não visitou / proc algumas vezes, pode se surpreender com a quantidade de detalhes disponíveis. Lembre-se de que / proc é um tipo muito diferente de sistema de arquivos. Como uma interface para dados do kernel, fornece uma visão dos detalhes do processo que estão sendo usados atualmente pelo sistema.

Alguns dos arquivos / proc mais úteis para visualização incluem cmdline, environment, fd, limites e status. As visualizações a seguir fornecem alguns exemplos do que você pode ver.

O arquivo de status mostra o processo em execução (bash), seu status, o ID do usuário e do grupo da pessoa que está executando o bash, uma lista completa dos grupos dos quais o usuário é membro e o ID do processo e o ID do processo pai.

$ head -11 /proc/65333/status
Name:   bash
Umask:  0002
State:  S (sleeping)
Tgid:   65333
Ngid:   0
Pid:    65333
PPid:   65320
TracerPid:      0
Uid:    1000    1000    1000    1000
Gid:    1000    1000    1000    1000
FDSize: 256
Groups: 4 11 24 27 30 46 118 128 500 1000
...

O arquivo cmdline mostra a linha de comando usada para iniciar o processo.

$ cat /proc/65333/cmdline
-bash

O arquivo environ mostra as variáveis de ambiente que estão em vigor.

$ cat environ
USER=shsLOGNAME=shsHOME=/home/shsPATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/gamesSHELL=/bin/bashTERM=xtermXDG_SESSION_ID=626XDG_RUNTIME_DIR=/run/user/1000DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/1000/busXDG_SESSION_TYPE=ttyXDG_SESSION_CLASS=userMOTD_SHOWN=pamLANG=en_US.UTF-8SSH_CLIENT=192.168.0.19 9385 22SSH_CONNECTION=192.168.0.19 9385 192.168.0.11 22SSH_TTY=/dev/pts/0$

O arquivo fd mostra os descritores do arquivo. Observe como eles refletem a pseudo-tty que está sendo usada (pts / 0).

$ ls -l /proc/65333/fd
total 0
lrwx------ 1 shs shs 64 May 12 09:45 0 -> /dev/pts/0
lrwx------ 1 shs shs 64 May 12 09:45 1 -> /dev/pts/0
lrwx------ 1 shs shs 64 May 12 09:45 2 -> /dev/pts/0
lrwx------ 1 shs shs 64 May 12 09:56 255 -> /dev/pts/0
$ who
shs      pts/0        2020-05-12 09:45 (192.168.0.19)

O arquivo de limits contém informações sobre os limites impostos ao processo.

$ cat limits
Limit                     Soft Limit           Hard Limit           Units
Max cpu time              unlimited            unlimited            seconds
Max file size             unlimited            unlimited            bytes
Max data size             unlimited            unlimited            bytes
Max stack size            8388608              unlimited            bytes
Max core file size        0                    unlimited            bytes
Max resident set          unlimited            unlimited            bytes
Max processes             23554                23554                processes
Max open files            1024                 1048576              files
Max locked memory         67108864             67108864             bytes
Max address space         unlimited            unlimited            bytes
Max file locks            unlimited            unlimited            locks
Max pending signals       23554                23554                signals
Max msgqueue size         819200               819200               bytes
Max nice priority         0                    0
Max realtime priority     0                    0
Max realtime timeout      unlimited            unlimited            us

pmap

O comando pmap leva você em uma direção totalmente diferente no que diz respeito ao uso da memória. Ele fornece um mapa detalhado do uso da memória de um processo. Para entender isso, você deve ter em mente que os processos não são executados por si mesmos. Em vez disso, eles usam uma ampla variedade de recursos do sistema. A saída pmap truncada abaixo mostra uma parte do mapa de memória para o login do bash de um único utilizador, juntamente com alguns totais de uso de memória na parte inferior.

$ pmap -x 43120
43120:   -bash
Address           Kbytes     RSS   Dirty Mode  Mapping
000055887655b000     180     180       0 r---- bash
0000558876588000     708     708       0 r-x-- bash
0000558876639000     220     148       0 r---- bash
0000558876670000      16      16      16 r---- bash
0000558876674000      36      36      36 rw--- bash
000055887667d000      40      28      28 rw---   [ anon ]
0000558876b96000    1328    1312    1312 rw---   [ anon ]
00007f0bd9a7e000      28      28       0 r---- libpthread-2.31.so
00007f0bd9a85000      68      68       0 r-x-- libpthread-2.31.so
00007f0bd9a96000      20       0       0 r---- libpthread-2.31.so
00007f0bd9a9b000       4       4       4 r---- libpthread-2.31.so
00007f0bd9a9c000       4       4       4 rw--- libpthread-2.31.so
00007f0bd9a9d000      16       4       4 rw---   [ anon ]
00007f0bd9aa1000      20      20       0 r---- libnss_systemd.so.2
00007f0bd9aa6000     148     148       0 r-x-- libnss_systemd.so.2
...
ffffffffff600000       4       0       0 --x--   [ anon ]
---------------- ------- ------- -------
total kB           11368    5664    1656
Kbytes: size of map in kilobytes
RSS: resident set size in kilobytes
Dirty: dirty pages (both shared and private) in kilobytes


Deixe uma resposta

O seu endereço de email não será publicado. Campos obrigatórios marcados com *

Ao continuar a usar o site, você concorda com o uso de cookies. Mais Informação

As configurações de cookies deste site estão definidas para "permitir cookies" para oferecer a melhor experiência de navegação possível. Se você continuar a usar este site sem alterar as configurações de cookies ou clicar em "Aceitar" abaixo, estará concordando com isso.

Fechar