Aller au contenu principal

Performance et optimisation


Table des matières

  1. Métriques clés
  2. Outils de monitoring
  3. Optimisation CPU
  4. Optimisation mémoire
  5. Optimisation I/O
  6. Exercices pratiques


1 - Métriques clés

Les 4 ressources fondamentales

Load Average

# Afficher le load
uptime
cat /proc/loadavg

# Exemple: 2.50 1.80 1.20
# = Load sur 1min, 5min, 15min
LoadÉtat (4 CPUs)
< 4.0Normal
4.0 - 8.0Chargé
> 8.0Surchargé
Règle pratique

Load < nombre de CPUs = OK Load > nombre de CPUs = Saturation possible

Métriques USE (Utilization, Saturation, Errors)

RessourceUtilizationSaturationErrors
CPUCPU timeRun queue-
MémoireMem usedSwappingOOM
DisqueDisk busyI/O waitErrors
RéseauTX/RX bytesDropsErrors

🔝 Retour à la table des matières



2 - Outils de monitoring

Vue d'ensemble système

# top - Vue classique
top

# htop - Amélioré
htop

# glances - Tout en un
glances

# dstat - Combiné
dstat -cdngy

CPU

# Utilisation par CPU
mpstat -P ALL 1

# Processus consommateurs
ps aux --sort=-%cpu | head

# Profiling
perf top
perf record -g ./myapp
perf report

Mémoire

# Vue mémoire
free -h

# Détaillé
cat /proc/meminfo

# Par processus
ps aux --sort=-%mem | head

# Mapping mémoire
pmap -x PID

Disque

# Utilisation
df -h
du -sh /*

# I/O en temps réel
iotop
iostat -xz 1

# Latence
ioping /dev/sda

Réseau

# Connexions
ss -tunapl
netstat -tunapl

# Trafic en temps réel
iftop
nethogs

# Statistiques
sar -n DEV 1

🔝 Retour à la table des matières



3 - Optimisation CPU

Identifier les problèmes

# Processus en CPU wait
ps aux | awk '$8 ~ /D/'

# Interruptions
cat /proc/interrupts
watch -n1 'cat /proc/interrupts'

# Context switches
vmstat 1

Nice et priorité

# Lancer avec priorité basse
nice -n 19 ./heavy_task.sh

# Modifier un processus existant
renice -n 10 -p PID

# Afficher les priorités
ps -eo pid,ni,comm | head

CPU Governor

# Voir le governor actuel
cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor

# Governors disponibles
cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_available_governors

# Changer (temporaire)
echo "performance" | sudo tee /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor

# Permanent avec cpufrequtils
apt install cpufrequtils
cpufreq-set -g performance

Affinité CPU

# Voir l'affinité
taskset -p PID

# Assigner à des CPUs spécifiques
taskset -c 0,1 ./myapp
taskset -c 2-3 -p PID

🔝 Retour à la table des matières



4 - Optimisation mémoire

Comprendre la mémoire Linux

free -h
# total used free shared buff/cache available
# Mem: 16G 4G 2G 1G 10G 10G
# Swap: 2G 0B 2G
TermeDescription
usedMémoire utilisée par les processus
freeMémoire non utilisée
buff/cacheCache fichiers (libérable)
availableDisponible pour les apps

Paramètres vm

# /etc/sysctl.d/99-memory.conf

# Swappiness (0-100, défaut 60)
# Plus bas = moins de swap
vm.swappiness = 10

# Pression sur le cache
vm.vfs_cache_pressure = 50

# Dirty pages - quand écrire sur disque
vm.dirty_ratio = 20
vm.dirty_background_ratio = 5

# Appliquer
sysctl -p /etc/sysctl.d/99-memory.conf

Vider les caches (test uniquement)

# Sync avant
sync

# Vider PageCache
echo 1 > /proc/sys/vm/drop_caches

# Vider dentries et inodes
echo 2 > /proc/sys/vm/drop_caches

# Vider tout
echo 3 > /proc/sys/vm/drop_caches

Huge Pages

# Vérifier le support
grep -i huge /proc/meminfo

# Configurer
echo 1024 > /proc/sys/vm/nr_hugepages

# Permanent
# /etc/sysctl.conf
vm.nr_hugepages = 1024

OOM Killer

# Ajuster le score OOM d'un processus
# -1000 = ne jamais tuer, +1000 = tuer en premier
echo -500 > /proc/PID/oom_score_adj

# Voir le score
cat /proc/PID/oom_score

🔝 Retour à la table des matières



5 - Optimisation I/O

Scheduler I/O

# Voir le scheduler actuel
cat /sys/block/sda/queue/scheduler

# Schedulers disponibles
# - mq-deadline : SSD et HDD modernes
# - kyber : SSD rapides
# - bfq : Desktop, fairness
# - none : NVMe

# Changer
echo mq-deadline > /sys/block/sda/queue/scheduler

Paramètres de file d'attente

# Read-ahead (Ko)
blockdev --getra /dev/sda
blockdev --setra 4096 /dev/sda

# Queue depth
cat /sys/block/sda/queue/nr_requests
echo 256 > /sys/block/sda/queue/nr_requests

Options de montage

# /etc/fstab optimisé pour SSD
/dev/sda1 / ext4 noatime,nodiratime,discard 0 1

# Options
# noatime : pas de mise à jour access time
# nodiratime : idem pour répertoires
# discard : TRIM pour SSD
# barrier=0 : désactiver barriers (risqué)

Benchmark I/O

# fio - outil de benchmark
apt install fio

# Test lecture séquentielle
fio --name=seqread --rw=read --bs=1M --size=1G --filename=/tmp/test

# Test écriture aléatoire
fio --name=randwrite --rw=randwrite --bs=4k --size=1G --filename=/tmp/test

# Test mixte
fio --name=mixed --rw=randrw --bs=4k --size=1G --filename=/tmp/test

Optimisation filesystem

# Vérifier la fragmentation (ext4)
e4defrag -c /dev/sda1

# Défragmenter
e4defrag /dev/sda1

# Paramètres ext4
tune2fs -l /dev/sda1

# XFS
xfs_info /dev/sda1
xfs_fsr /mountpoint # Défragmentation

🔝 Retour à la table des matières



6 - Exercices pratiques

Exercice 1 : Analyse de charge

Un serveur a un load average de 8.5 sur 4 CPUs. Analysez la situation :

Solution
# 1. Vérifier le load
uptime

# 2. Identifier les processus CPU
top -b -n1 | head -20
ps aux --sort=-%cpu | head

# 3. Vérifier I/O wait
vmstat 1 5
# Si wa% élevé -> problème I/O, pas CPU

# 4. Vérifier les processus en D state
ps aux | awk '$8 ~ /D/'

# Load 8.5 sur 4 CPUs = saturation
# Actions : identifier le goulot d'étranglement

Exercice 2 : Optimisation swap

Réduisez l'utilisation du swap sur un serveur de base de données :

Solution
# /etc/sysctl.d/99-db.conf
vm.swappiness = 1
vm.vfs_cache_pressure = 50

# Appliquer
sysctl -p /etc/sysctl.d/99-db.conf

# Vérifier
cat /proc/sys/vm/swappiness

Quiz

Q1. Que signifie un load average de 4.0 sur une machine avec 2 CPUs ?

Réponse

Le système est surchargé : en moyenne 4 processus attendent un CPU alors qu'il n'y en a que 2 disponibles.

Q2. Quelle commande permet de voir l'I/O par processus ?

Réponse

iotop

🔝 Retour à la table des matières



Points clés à retenir

  • USE Method : Utilization, Saturation, Errors pour chaque ressource
  • Load Average : comparer au nombre de CPUs
  • vm.swappiness : réduire pour les serveurs
  • Scheduler I/O : mq-deadline pour SSD/HDD, none pour NVMe
  • noatime : option de montage pour les performances
  • Toujours mesurer avant et après optimisation

🔝 Retour à la table des matières


← Chapitre précédent | Chapitre suivant : Haute disponibilité →