O psutil é uma biblioteca Python cross-plataforma projetada para acessar informações sobre processos em execução e utilização de recursos do sistema, incluindo CPU, memória, disco, rede e sensores. Ela permite monitoramento detalhado do sistema, aálise de desempenho, controle de recursos de processos e gerenciamento de tarefas, substituindo a necessidade de comandos shell como ps, top ou df. O psutil suporta diversas plataformas, como Linux, Windows, macOS, FreeBSD, OpenBSD, NetBSD, Solaris e AIX, funcionando em Python 2.6 a 3.6 em arquiteturas de 32 e 64 bits, além de PyPy.
Instalação
Para instalar o psutil, utilize o gerenciador de pacotes pip. Os exemplos a seguir assumem o Python 3.6.
# Instalação via pip
pip install psutil
Funções Básicas
Primeiro, importe a biblioteca e verifique a versão instalada:
import psutil
versao_psutil = psutil.version_info
print(versao_psutil) # Saída: (5, 4, 3)
Monitoramento de CPU
Para obter informações sobre o processador:
# Núcleos lógicos e físicos
num_logico = psutil.cpu_count()
num_fisico = psutil.cpu_count(logical=False)
print(f"Núcleos lógicos: {num_logico}, Físicos: {num_fisico}")
# Tempo de CPU (usuário, sistema, ocioso)
tempos_cpu = psutil.cpu_times()
print(tempos_cpu)
# Uso de CPU por núcleo, semelhante ao comando top
uso_nucleos = psutil.cpu_percent(percpu=True)
print(uso_nucleos)
# Amostragem de uso de CPU ao longo do tempo
intervalo_amostras = []
for segundo in range(5):
amostra = psutil.cpu_percent(interval=1, percpu=True)
intervalo_amostras.append(amostra)
print(intervalo_amostras)
Monitoramento de Memória
Para acessar dados sobre memória RAM e swap:
# Memória virtual (RAM)
info_memoria = psutil.virtual_memory()
print(info_memoria)
# Memória swap
info_swap = psutil.swap_memory()
print(info_swap)
Monitoramento de Disco
Consulte partições, uso de espaço e operações de I/O:
# Listar partições
particoes = psutil.disk_partitions()
print(particoes)
# Uso de uma partição específica
uso_disco = psutil.disk_usage('/')
print(uso_disco)
# Contadores de I/O do disco
io_disco = psutil.disk_io_counters()
print(io_disco)
Monitoramento de Rede
Obtenha detalhes sobre interfaces de rede e tráfego:
# Status das interfaces de rede
stats_rede = psutil.net_if_stats()
interface_en0 = stats_rede.get("en0")
print(interface_en0)
# Endereços das interfaces
enderecos_rede = psutil.net_if_addrs()
enderecos_en0 = enderecos_rede.get("en0")
for endereco in enderecos_en0:
print(endereco.address)
# Contadores de I/O de rede (bytes e pacotes)
io_rede = psutil.net_io_counters()
print(io_rede)
# Conexões de rede (requer privilégios elevados)
try:
conexoes = psutil.net_connections()
print(conexoes)
except psutil.AccessDenied:
print("Acesso negado. Execute como administrador.")
Monitoramento de Processos
Acesse informações sobre processos em execução:
# Listar IDs de processos
lista_pids = psutil.pids()
print(f"Número de processos: {len(lista_pids)}")
# Informações de um processo específico pelo PID
pid_exemplo = 1 # Altere para um PID válido
processo = psutil.Process(pid_exemplo)
print(f"Nome: {processo.name()}, Caminho: {processo.exe()}")
# Comando de inicialização e contagem de threads
comando = processo.cmdline()
threads = processo.num_threads()
print(f"Comando: {comando}, Threads: {threads}")
# Variáveis de ambiente do processo (use com cautela)
try:
ambiente = processo.environ()
print(ambiente)
except psutil.AccessDenied:
print("Permissão negada para acessar variáveis de ambiente.")