1. A propos du module psutil
psutil (utilitaires de processus et système) est une bibliothèque Python multiplateforme permettant de récupérer des informations sur les processus en cours d'exécution et l'utilisation du système (processeur, mémoire, disques, réseau, capteurs) en Python. Elle est principalement utile pour la surveillance, le profilage et la limitation des ressources des processus, ainsi que pour la gestion des processus en cours d'exécution. Elle implémente de nombreuses fonctionnalités offertes par les outils de ligne de commande UNIX classiques tels que ps, top, iotop, lsof, netstat, ifconfig, free, etc. psutil est actuellement compatible avec les plateformes suivantes :
- Linux
- Windows
- macOS
- FreeBSD, OpenBSD, NetBSD
- Sun Solaris
- AIX
2. Installation de Psutil
Avant de commencer, installez psutil via pip:
1 |
pip install psutil |
3. Fonctionnalités Principales
3.1. Informations sur le CPU
Utilisation Globale du CPU:
1 2 3 4 5 6 7 8 9 |
import psutil # Pourcentage d'utilisation du CPU (global) cpu_percent = psutil.cpu_percent(interval=1) # Moyenne sur 1 seconde print(f"Utilisation du CPU : {cpu_percent}%") # Pourcentage par cœur cpu_percent_per_core = psutil.cpu_percent(interval=1, percpu=True) print(f"Utilisation par cœur : {cpu_percent_per_core}") |
Fréquence du CPU
1 2 3 4 |
cpu_freq = psutil.cpu_freq() print(f"Fréquence actuelle : {cpu_freq.current} MHz") print(f"Frequence minimale : {cpu_freq.min} MHz") print(f"Fréquence maximale : {cpu_freq.max} MHz") |
Nombre de Cœurs
1 2 |
print(f"Cœurs physiques : {psutil.cpu_count(logical=False)}") print(f"Cœurs logiques (avec hyperthreading) : {psutil.cpu_count(logical=True)}") |
3.2. Mémoire (RAM et Swap)
Mémoire Vive (RAM)
1 2 3 4 5 |
mem = psutil.virtual_memory() print(f"Mémoire totale : {mem.total / (1024 ** 3):.2f} Go") print(f"Mémoire disponible : {mem.available / (1024 ** 3):.2f} Go") print(f"Mémoire utilisée : {mem.used / (1024 ** 3):.2f} Go") print(f"Pourcentage utilisé : {mem.percent}%") |
Mémoire Swap
1 2 3 |
swap = psutil.swap_memory() print(f"Swap total : {swap.total / (1024 ** 3):.2f} Go") print(f"Swap utilisé : {swap.used / (1024 ** 3):.2f} Go") |
3.3. Disques et Partitions
Liste des Partitions
1 2 3 4 5 |
partitions = psutil.disk_partitions() for partition in partitions: print(f"Disque : {partition.device}") print(f"Point de montage : {partition.mountpoint}") print(f"Système de fichiers : {partition.fstype}") |
Utilisation du Disque
1 2 3 4 5 |
disk_usage = psutil.disk_usage('/') # Surveillance de la partition racine print(f"Espace total : {disk_usage.total / (1024 ** 3):.2f} Go") print(f"Espace utilisé : {disk_usage.used / (1024 ** 3):.2f} Go") print(f"Espace libre : {disk_usage.free / (1024 ** 3):.2f} Go") print(f"Pourcentage utilisé : {disk_usage.percent}%") |
Statistiques d'E/S Disque
1 2 3 |
disk_io = psutil.disk_io_counters() print(f"Lectures : {disk_io.read_count} (total: {disk_io.read_bytes / (1024 ** 2):.2f} Mo)") print(f"Écritures : {disk_io.write_count} (total: {disk_io.write_bytes / (1024 ** 2):.2f} Mo)") |
3.4. Réseau
Statistiques Réseau
1 2 3 |
net_io = psutil.net_io_counters() print(f"Octets reçus : {net_io.bytes_recv / (1024 ** 2):.2f} Mo") print(f"Octets envoyés : {net_io.bytes_sent / (1024 ** 2):.2f} Mo") |
Connexions Réseau Actives
1 2 3 4 5 |
connections = psutil.net_connections(kind='inet') # IPv4/IPv6 for conn in connections: print(f"Adresse locale : {conn.laddr}") print(f"Adresse distante : {conn.raddr}") print(f"Statut : {conn.status}") |
3.5. Gestion des Processus
Liste des Processus en Cours
1 2 |
for proc in psutil.process_iter(['pid', 'name', 'username']): print(f"PID: {proc.info['pid']}, Nom: {proc.info['name']}, Utilisateur: {proc.info['username']}") |
Informations Détaillées sur un Processus
1 2 3 4 5 6 7 8 9 |
pid = 1234 # Remplacez par un PID existant try: process = psutil.Process(pid) print(f"Nom : {process.name()}") print(f"Exécutable : {process.exe()}") print(f"Utilisation CPU : {process.cpu_percent()}%") print(f"Utilisation mémoire : {process.memory_info().rss / (1024 ** 2):.2f} Mo") except psutil.NoSuchProcess: print("Processus introuvable.") |
Tuer un Processus
1 2 3 4 5 6 7 |
pid = 1234 try: process = psutil.Process(pid) process.terminate() # Terminaison "propre" # process.kill() # Force la fermeture (plus agressif) except psutil.NoSuchProcess: print("Processus déjà terminé.") |
4. Surveillance en Temps Réel
Nous donnins dans ce paragraphe un exemple simple de script pour surveiller les ressources en temps réel:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
import psutil import time while True: # CPU cpu_usage = psutil.cpu_percent(interval=1) # Mémoire mem = psutil.virtual_memory() # Disque disk = psutil.disk_usage('/') print(f"CPU: {cpu_usage}% | RAM: {mem.percent}% | Disque: {disk.percent}%") time.sleep(2) # Rafraîchissement toutes les 2 secondes |
5. Cas d'Utilisation Avancés
5.1. Détection de Surcharge Système
1 2 3 4 5 6 7 8 9 10 |
cpu_threshold = 80 # 80% d'utilisation CPU mem_threshold = 90 # 90% d'utilisation mémoire cpu_usage = psutil.cpu_percent(interval=1) mem_usage = psutil.virtual_memory().percent if cpu_usage > cpu_threshold: print(f"Alerte : CPU à {cpu_usage}% !") if mem_usage > mem_threshold: print(f"Alerte : Mémoire à {mem_usage}% !") |
5.2. Journalisation des Performances
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
import csv import time with open('system_log.csv', 'w', newline='') as file: writer = csv.writer(file) writer.writerow(["Timestamp", "CPU %", "RAM %", "Disk %"]) while True: timestamp = time.strftime("%Y-%m-%d %H:%M:%S") cpu = psutil.cpu_percent(interval=1) ram = psutil.virtual_memory().percent disk = psutil.disk_usage('/').percent writer.writerow([timestamp, cpu, ram, disk]) time.sleep(5) # Enregistrement toutes les 5 secondes |
6. Documentation officielle
Psutil est une bibliothèque indispensable pour la surveillance système en Python.
Fonctionalités:
- Surveillance des ressources (CPU, RAM, disque, réseau).
- Gestion des processus (liste, informations, terminaison).
- Scripts de monitoring personnalisés.
Idéal pour:
- Administration système
- Optimisation des performances
- Détection d'anomalies
Documentation Officielle: https://psutil.readthedocs.io/
Younes Derfoufi
CRMEF OUJDA