Nmon: Performance Linux em Tempo Real e em Ficheiro
Quando um servidor começa a responder mal, o primeiro instinto é abrir as ferramentas de monitorização que já estão a correr — e aqui no kbase já cobrimos várias, do Netdata ao Monit. Mas há situações em que nada disto está instalado, ou o problema é pontual e não justifica mais um agente permanente. Para esse momento, o nmon é a ferramenta de diagnóstico: abres a sessão de SSH, premes uma letra e tens o painel que precisas, do CPU aos discos. O mesmo programa grava tudo num ficheiro, para analisares com calma depois do incidente.
O nmon (Nigel’s Monitor) foi escrito por Nigel Griffiths, na altura na IBM, para o AIX e depois portado para Linux. É um binário único que usa a biblioteca ncurses, consome pouquíssimos recursos e mostra tudo no ecrã actualizado de dois em dois segundos. Não tem agentes, não tem base de dados, não tem interface web. É esta simplicidade que o torna ideal para diagnóstico pontual e para gravações de curta duração, por exemplo durante uma janela de manutenção ou um teste de carga.
Neste artigo: instalar o nmon, perceber o ecrã e as teclas, percorrer os painéis de CPU, memória, discos e rede, gravar para ficheiro com o modo -f e analisar o resultado com o nmon Analyser e o nmonchart. No fim, um diagnóstico guiado de 60 segundos.
Neste artigo:
- Instalar o nmon
- O ecrã inicial e as teclas
- CPU e processos
- Memória e paginação
- Discos e I/O
- Rede
- Gravar para ficheiro: o modo -f
- Analisar o .nmon
- Diagnóstico guiado
- Erros Comuns
- Checklist
- Artigos Relacionados
- Fontes Oficiais
1. Instalar o nmon
O nmon está nos repositórios oficiais das principais distribuições Linux.
Em Debian e Ubuntu:
sudo apt update
sudo apt install nmon
No Ubuntu, o pacote está no componente universe, activo por omissão na maioria das instalações. Em Debian vem do arquivo principal.
Em RHEL, Rocky Linux e AlmaLinux, o nmon está no repositório EPEL:
sudo dnf install epel-release
sudo dnf install nmon
Para confirmar a versão instalada:
apt policy nmon
As distribuições trazem versões da série 16 (16p no Ubuntu 24.04, 16q no Debian 13). Se precisares de outra arquitectura ou da última versão, o site oficial do nmon disponibiliza binários pré-compilados e o código-fonte. O pacote é minúsculo, na ordem dos 200 kB instalados.
2. O ecrã inicial e as teclas
Lança o nmon sem argumentos:
nmon
O arranque mostra o logotipo, os dados do servidor (distribuição, modelo dos processadores, contagem de núcleos) e a lista de teclas. Os painéis de estatísticas é que não aparecem: cada um acende-se com a sua tecla.
Saída do arranque (captura real, com linhas truncadas):
│ _ __ _ __ ___ ___ _ __ For help type H or ... │
│| '_ \| '_ ` _ \ / _ \| '_ \ nmon -? - hint │
│| | | | | | | | | (_) | | | | nmon -h - full details │
│|_| |_|_| |_| |_|\___/|_| |_| │
│ To stop nmon type q to Quit │
│Fedora release 35 (Thirty Five) VERSION="35 (Thirty Five)" │
│Vendor=AuthenticAMD Model=AMD EPYC-Milan Processor │
│MHz=1911.004 bogomips=3822.00 lscpu:CPU=4 Little Endian │
│Use these keys to toggle statistics on/off: │
│ c = CPU l = CPU Long-term - = Faster screen updates│
│ m = Memory V = Virtual memory j = File Systems │
│ d = Disks n = Network . = only busy disks/procs│
│ r = Resource N = NFS h = more options │
│ k = Kernel t = Top-processes q = Quit │
A lista de teclas que vais usar no dia a dia:
| Tecla | Painel |
|---|---|
| c | CPU, um gráfico por núcleo |
| l | histórico de CPU a longo prazo |
| m | memória |
| V | memória virtual e paginação |
| d | discos, gráficos de I/O e % busy |
| j | sistemas de ficheiros |
| n | rede, por placa |
| k | estatísticas do kernel, com a fila de execução |
| t | top processos |
| r | recursos: versão do kernel, CPU, uptime |
| h | mais opções |
| q | sair |
Cada tecla acende o painel respectivo e premir de novo apaga-o. Os painéis combinam-se e empilham no mesmo ecrã: c com d com n mostra CPU, discos e rede em conjunto, actualizado de dois em dois segundos. Duas teclas ajudam no ecrã cheio: . mostra apenas os discos e processos ocupados, e + ou - ajustam a velocidade de actualização. Para sair, q.

3. CPU e processos
Com a tecla c, o nmon desenha um gráfico de barras por cada núcleo, com a repartição entre utilizador, sistema, espera de I/O e inactivo. A barra a 100 % significa saturação total do núcleo.
Saída do painel (captura real de um servidor com quatro núcleos):
┌─16k──[H for help]──Hostname=f35ks01─Refresh= 2secs ─18:05:58─┐
│ CPU Utilisation ─────────────────────────────────────────────│
│CPU User% Sys% Wait% Idle|0 |25 |50 |75 100| │
│ 1 3.6 17.2 0.0 79.2|Ussssssss> | │
│ 2 2.1 6.2 0.0 91.7|Usss > | │
│Avg 3.0 10.3 0.0 86.7|Usssss> | │
└──────────────────────────────────────────────────────────────┘
O que importa ler: se User% está alto, é trabalho de aplicação. Se Sys% domina, o kernel está a trabalhar demasiado. Se Wait% é alto, o processador passa a vida à espera de I/O — disco é a hipótese mais provável, mas não a única (rede e outros subsistemas também geram esperas). Trata o valor como pista de investigação, não como conclusão, e segue ao painel de discos e aos restantes para confirmar.
A tecla t mostra os processos com mais consumo, uma tabela com PID, utilizador, CPU, memória e nome. Premir t várias vezes alterna o modo de ordenação, do básico ao desempenho médio e ao I/O por processo.
A tecla l acrescenta um histórico de CPU a longo prazo, umas linhas que mostram a evolução das últimas horas no próprio ecrã — útil para confirmar se a carga actual é um pico ou o estado normal do servidor.
A tecla k abre as estatísticas do kernel: fila de execução (run queue), load average, uptime, mudanças de contexto e processos criados. Load alto com CPU tranquilo significa processos à espera de um recurso — tipicamente disco ou memória, e os painéis seguintes decidem qual.
4. Memória e paginação
A tecla m abre o painel Memory and Swap, com o total e o livre de RAM e de swap em MB, as percentagens e a memória interna do kernel.
Saída do painel (etiquetas reais, valores de exemplo):
Memory and Swap ────────────────────────────────────────────
PageSize:4KB
RAM-Memory High-Memory Low-Memory Swap-Space
Total (MB) 15872.0 15872.0 0.0 2048.0
Free (MB) 2140.5 2140.5 0.0 1740.0
Free Percent 13.5% 13.5% 85.0%
Linux Kernel Internal Memory (MB)
Shared= 312.4 Cached= 8842.1 Active= 2140.8
Buffers= 168.2 Swapcached= 12.4 Inactive = 5310.6
A leitura normal: a cache do kernel cresce até encher a RAM e isso é bom, não é um problema. O sinal de alarme está na coluna Swap-Space, mas com cautela: swap quase cheio, por si só, não prova pressão de memória actual — sistemas com vm.swappiness alto vivem com swap ocupado sem sofrer. O indicador que conta é a actividade de swap a crescer ao longo do tempo, correlacionada com os restantes indicadores. As colunas High e Low Memory existem por compatibilidade e aparecem como not in use nos kernels de 64 bits.
A tecla V acrescenta o painel Virtual Memory, com os contadores de paginação de /proc/vmstat e as Huge Pages.
Virtual Memory ─────────────────────────────────────────────
nr_dirty = 12 pgpgin = 48210
nr_writeback= 0 pgpgout = 91244
nr_unstable = 0 pgpswpin = 8
nr_table_pgs= 123456 pgpswpout = 42
nr_mapped = 58120 pgfree = 1204311
nr_slab = 4912 pgactivate = 88210
pgdeactivate= 421
O que importa: pgpswpin e pgpswpout contam as páginas trocadas com o swap desde o arranque — são contadores acumulados, por isso um valor alto não prova pressão actual. O que interessa é a tendência: observa o painel dois a três minutos e confirma se os valores continuam a crescer de forma sustentada, em combinação com o swap quase cheio e lentidão perceptível. Para identificar o culpado, combina m com t e ordena pela coluna de memória.
5. Discos e I/O
A tecla d desenha o painel Disk I/O, com o nome do disco e o percentual de ocupação (Busy) à esquerda, as velocidades de leitura e escrita (maioritariamente em KB/s) e uma barra a escala cheia à direita. Os números vêm de /proc/diskstats, a mesma fonte do iostat.
Saída do painel (etiquetas reais, valores de exemplo):
DiskName Busy Read Write KB|0 |25 |50 |75 100|
sda 42% 8123.4 234.5 [####................]
sdb 2% 4.2 12.1 [#...................]
Busy é a pista de partida, não um veredicto: acima de 80 % constante merece investigação, mas não confirma um gargalo por si só — em SSD, NVMe, RAID ou armazenamento virtual, discos trabalham bem a percentagens altas. Correlaciona a ocupação com a latência e o tamanho de fila no painel d e, sobretudo, com o desempenho sentido pela aplicação. Discos mecânicos saturam nas operações por segundo muito antes de saturarem em MB/s, pelo que um disco a 100 % com poucos KB/s é típico de acesso aleatório — nesse caso concreto, sim, o disco é o suspeito principal.
Para a perspectiva dos sistemas de ficheiros — pontos de montagem, espaço total, usado e percentagem — a tecla é j. Combina os dois quando o sintoma é lentidão em ficheiros: às vezes o problema não é o I/O do disco, é um volume cheio.
6. Rede
A tecla n mostra o tráfego por placa de rede, com kilobytes recebidos e transmitidos por segundo, pacotes e o tamanho médio dos pacotes.
Saída do painel (captura real, com a coluna Peak truncada):
│ Network I/O ─────────────────────────────────────────────────│
│I/F Name Recv=KB/s Trans=KB/s p_in p_out in_sz out_sz Peak->..│
│ lo 0.0 0.0 0.0 0.0 0.0 0.0...│
│ enp1s0 0.0 0.0 0.5 0.0 52.0 0.0...│
│ enp7s0 218.6 5923.4 3335.5 9989.68 67.1 607.2...│
│ Network Error Counters ──────────────────────────────────────│
│I/F Name iErrors iDrop iOverrun iFrame oErrors oDrop oOver..│
│ enp7s0 0 34419 0 0 0 0 ...│
Para além do volume, repara nas colunas p_in e p_out (pacotes por segundo) e no painel de erros: contadores de iDrop ou oDrop a crescer indicam que a placa está a descartar pacotes, um problema que o volume médio esconde. Num diagnóstico de lentidão, uma placa com Recv ou Trans encostada ao tecto da rede (cerca de 118 MB/s numa gigabit) é gargalo confirmado — e erros a subir com tráfego baixo apontam para cablagem, switch ou negociação de velocidade.
7. Gravar para ficheiro: o modo -f
O segundo modo do nmon não mostra nada no ecrã. Com a opção -f, recolhe amostras e escreve-as num ficheiro CSV, com o nome no formato hostname_AAAAMMDD_HHMM.nmon no directório corrente. Detalhe prático da manpage: o -f tem de ser o primeiro parâmetro do comando.
nmon -f -s 10 -c 360
Esta linha grava uma amostra a cada 10 segundos (-s 10) durante 360 amostras (-c 360), ou seja, uma hora. As opções estão documentadas na página de manual do Debian:
| Opção | Função |
|---|---|
-f |
modo gravação para ficheiro (spreadsheet output) |
-s |
segundos entre amostras (por omissão 300) |
-c |
número de amostras (por omissão 288, ou seja 24 horas) |
-t |
incluir os top processos no ficheiro |
-d |
aumentar o número de discos registados (por omissão 256) |
-x |
perfil de capacity planning: equivalente a -f -t -s 900 -c 96, uma amostra de 15 minutos durante um dia |
Sem -s e -c, o nmon grava por omissão durante 24 horas, a cada 5 minutos. Para um diagnóstico de curta duração, intervalos curtos:
nmon -f -t -s 5 -c 24
Isto grava dois minutos com os top processos incluídos. Durante a gravação, o processo corre em fundo e termina sozinho no fim do número de amostras, fechando o ficheiro. Para o parar antes da hora, os sinais SIGUSR1 e SIGUSR2 terminam a recolha de forma limpa, com o ficheiro válido até à última amostra — comportamento confirmado no código-fonte (o handler trata SIGUSR1/2 como fim da recolha nas versões 15 e 16), embora a manpage do Debian não documente estes sinais; o kill normal do processo também fecha o ficheiro correctamente. Também é possível fixar opções permanentes na variável de ambiente NMON, por exemplo export NMON=-t para incluir sempre os top processos.
8. Analisar o .nmon
O ficheiro .nmon é texto CSV, mas lê-lo à mão não faz sentido. Existem duas ferramentas oficiais, ambas disponíveis no site oficial do nmon:
nmon Analyser — uma folha de cálculo Excel com macros que carrega o ficheiro .nmon e produz automaticamente dezenas de gráficos, uma folha por cada tipo de dados: CPU, memória, discos, rede, top processos. É a via clássica para relatórios de desempenho, mas exige Microsoft Excel em Windows.
nmonchart — um script para Linux que transforma o .nmon numa página HTML com gráficos interactivos (Google Charts), sem Excel e sem software proprietário. Precisa apenas de ksh e gawk:
ksh nmonchart ficheiro.nmon
O resultado abre em qualquer navegador, dentro ou fora do servidor. Para ambientes PME sem Windows por perto, o nmonchart é o caminho mais rápido do .nmon a um gráfico que se pode mostrar a um colega ou guardar como evidência do incidente.
9. Diagnóstico guiado
Cenário: um servidor de ficheiros está lento às 15 horas e ninguém mexeu em nada. Abre-se a sessão de SSH e lança-se o nmon.
nmone depoisc. CPU a 40 % comWait%alto? O processador não é o gargalo, e o wait alto é uma pista de esperas de I/O a investigar — disco é a hipótese mais comum, não uma conclusão. CPU a 98 %? Passa ao passo 2 para encontrar o processo.t. A tabela de processos mostra o culpado do CPU. Se nada consome CPU, segue para o passo 3.me depoisV. Swap quase cheio e paginação a crescer durante a observação? Activa a hipótese de falta de memória — confirma com a tendência antes de fechar o diagnóstico. Identifica o processo comtordenado por memória.d. Um disco comBusya 95 % e wait elevado? Forte suspeita de gargalo de I/O — confirma com latência e fila antes de fechar. Descobre quem escreve comtem modo I/O.n. Valores deRecvouTransno tecto da rede? O tráfego é o problema, não o servidor.- Deixa evidência para depois:
nmon -f -t -s 5 -c 12grava um minuto completo com processos, para analisar em casa com o nmonchart.
Num minuto percorres os quatro recursos que explicam quase todas as queixas de lentidão em Linux: CPU, memória, disco e rede. Se os cinco painéis estão tranquilos e o servidor continua lento, o problema está mais longe: serviço sobrecarregado, base de dados externa ou ligação de rede do cliente — e os painéis tranquilos afastam as hipóteses de saturação de CPU, memória, disco e rede durante a observação — não provam que o servidor é inocente: uma aplicação ou serviço no próprio servidor pode estar lento sem saturar qualquer recurso. Nesse cenário, os painéis deram o primeiro passo: descartaram os quatro suspeitos clássicos.
Erros Comuns
| Sintoma | Causa provável | Correcção |
|---|---|---|
nmon: command not found |
Pacote não instalado ou EPEL em falta | Instalar epel-release em RHEL/Rocky/Alma e voltar a instalar o nmon |
| Ecrã com o cabeçalho mas sem dados | Nenhuma tecla premida, os painéis não aparecem sozinhos | Premir h para ver a lista e acender os painéis desejados |
Ficheiro .nmon termina ao fim de poucos minutos |
Contagem -c pequena ou nmon lançado com intervalos curtos sem contar as amostras |
Recalcular: amostras = duração ÷ intervalo, por exemplo nmon -f -s 10 -c 360 para uma hora |
Ficheiro .nmon enorme, gigabytes |
Intervalo de segundos com -s muito pequeno durante muitos dias |
Gravar com -s de 60 a 300 segundos e limitar -c |
| Tecla sem efeito no ecrã | Tecla inexistente ou em maiúsculas erradas (por exemplo V de memória virtual) |
Premir h para ver a lista de teclas válidas |
| nmon Analyser recusa abrir o ficheiro | Macros do Excel bloqueadas ou versão antiga do Analyser | Permitir macros na folha e descarregar a versão actual no site oficial |
| Sem gráficos para ver fora do Excel | Analisar com o nmonchart em Linux | Gerar a página HTML com ksh nmonchart ficheiro.nmon |
Checklist
- nmon instalado do repositório (
aptoudnfcom EPEL) e versão 16 confirmada - Tecla
hconsultada e os painéis principais dominados:c,m,V,d,n,t - Sequência de diagnóstico decorada: CPU, processos, memória e paginação, discos, rede
- Gravação de fundo testada:
nmon -f -s 10 -c 360e ficheiro.nmoncriado no directório corrente - Gravações longas com
-tpara incluir os top processos e-xpara capacity planning de um dia - nmonchart ou nmon Analyser disponível para converter o
.nmonem gráficos - Paragem limpa de uma gravação testada com o sinal
SIGUSR1ouSIGUSR2(ou com o kill normal do processo)
Artigos Relacionados
- Monitorix: Monitorização Leve de Servidores Linux
- Netdata: Monitorização em Tempo Real com Zero Config para PME
- Monit: Monitorização e Reparação Automática de Serviços Linux
- lsof: Ficheiros Abertos e Portas em Diagnóstico Linux
Fontes Oficiais
- nmon and njmon — site oficial do nmon (SourceForge): https://nmon.sourceforge.io/
- Página de manual do nmon (Debian): https://manpages.debian.org/trixie/nmon/nmon.1.en.html
- nmon Analyser — página oficial: https://nmon.sourceforge.net/pmwiki.php?n=Site.Nmon-Analyser
- nmonchart — página oficial: https://nmon.sourceforge.net/pmwiki.php?n=Site.Nmonchart
- Pacote nmon no Ubuntu (packages.ubuntu.com): https://packages.ubuntu.com/noble/nmon
- Original nmon web page — IBM: https://www.ibm.com/support/pages/original-nmon-web-page