draft: Cache en mémoire : vider
This commit is contained in:
@@ -1,4 +1,4 @@
|
||||
{
|
||||
"title": "Critique de l'article",
|
||||
"_updated_at": "2026-05-15 21:37:37"
|
||||
"title": "Gestion mémoire et processus sous Linux",
|
||||
"_updated_at": "2026-05-15 21:40:10"
|
||||
}
|
||||
|
||||
@@ -1,50 +1,73 @@
|
||||
# Critique de l'article
|
||||
Voici l'article remanié :
|
||||
|
||||
L'article est techniquement correct mais souffre de plusieurs problèmes de forme et de structure. Voici une critique détaillée.
|
||||
````markdown
|
||||
# Gestion mémoire et processus sous Linux
|
||||
|
||||
## Problèmes de structure
|
||||
Notes pratiques sur la libération des caches mémoire, la manipulation du swap et l'arrêt de processus par nom.
|
||||
|
||||
**Hiérarchie des titres incohérente.** Le titre principal est « Cache en mémoire : vider », mais la section couvre aussi le swap et le `killall`, qui n'ont rien à voir avec le cache. Soit le titre est trop restrictif, soit les sections sur swap et killall sont mal placées. Un titre comme « Gestion mémoire et processus sous Linux » serait plus honnête.
|
||||
## Vider les caches mémoire
|
||||
|
||||
**Niveaux de titres mal utilisés.** « To free pagecache », « To free dentries and inodes », etc. devraient être des sous-sections (`##` ou `###`), pas du texte libre. À l'inverse, « dés / activer le swap » est en `##` alors qu'il est au même niveau logique que les trois opérations sur `drop_caches`.
|
||||
Le noyau Linux utilise la RAM libre pour mettre en cache des données disque (pagecache) et des métadonnées du système de fichiers (dentries, inodes). Ce cache est automatiquement libéré quand une application a besoin de mémoire, il n'est donc **généralement pas nécessaire de le vider manuellement**. C'est surtout utile pour benchmarker des I/O disque sans bénéficier du cache, ou pour diagnostiquer un comportement mémoire.
|
||||
|
||||
**Lien isolé en début d'article.** L'URL stackexchange est posée brute, sans contexte. Une simple mention « Source : [unix.stackexchange.com](…) » en fin de section serait plus propre.
|
||||
Avant de vider les caches, il est recommandé d'exécuter `sync` pour forcer l'écriture sur disque des données en attente :
|
||||
|
||||
## Problèmes de contenu
|
||||
```bash
|
||||
# Libérer le pagecache
|
||||
sudo sh -c 'sync; echo 1 > /proc/sys/vm/drop_caches'
|
||||
|
||||
**Mélange français/anglais non justifié.** « To free pagecache » devrait être traduit en français pour rester cohérent avec le reste (« Libérer le pagecache »).
|
||||
# Libérer les dentries et inodes
|
||||
sudo sh -c 'sync; echo 2 > /proc/sys/vm/drop_caches'
|
||||
|
||||
**Absence d'explications.** Les commandes sont données sans dire :
|
||||
- ce que sont réellement le pagecache, les dentries et les inodes ;
|
||||
- que ces opérations ne « libèrent » que du cache *propre* (clean), donc qu'elles n'augmentent pas vraiment la mémoire disponible utile ;
|
||||
- qu'écrire dans `drop_caches` est une opération non-destructive mais qu'il est recommandé de faire `sync` avant pour vider les écritures en attente sur disque.
|
||||
|
||||
La commande recommandée est en fait :
|
||||
```
|
||||
# Libérer pagecache, dentries et inodes
|
||||
sudo sh -c 'sync; echo 3 > /proc/sys/vm/drop_caches'
|
||||
```
|
||||
|
||||
**Le `swapoff -a; swapon -a` mérite un avertissement.** Cette opération force le contenu du swap à revenir en RAM, ce qui peut planter le système si la RAM disponible est insuffisante. C'est un piège classique à mentionner.
|
||||
L'opération est non destructive : seules les données « propres » (déjà synchronisées sur disque) sont libérées. Les données modifiées (« dirty ») restent en mémoire jusqu'à leur écriture.
|
||||
|
||||
**`killall` est ambigu selon le système.** Sous Linux (GNU killall, du paquet `psmisc`), il tue par nom. Mais sur certains Unix (Solaris historiquement), `killall` tue *tous* les processus. À préciser, ou à remplacer par `pkill` qui est plus prévisible et portable. Mentionner aussi `killall -9` si le processus ne répond pas, et la différence entre SIGTERM (par défaut) et SIGKILL.
|
||||
Source : [unix.stackexchange.com](https://unix.stackexchange.com/questions/87908/how-do-you-empty-the-buffers-and-cache-on-a-linux-system)
|
||||
|
||||
## Problèmes de formatage Markdown
|
||||
## Désactiver et réactiver le swap
|
||||
|
||||
Les blocs de commandes ne sont pas dans des *fenced code blocks* (```` ``` ````), ils utilisent une indentation. Le résultat est lisible mais moins propre, notamment parce que la coloration syntaxique ne s'applique pas. Préférer :
|
||||
Forcer le rapatriement du swap en RAM (utile par exemple après avoir terminé un processus gourmand, pour retrouver des performances normales) :
|
||||
|
||||
````
|
||||
```bash
|
||||
sudo sh -c 'echo 3 > /proc/sys/vm/drop_caches'
|
||||
sudo swapoff -a
|
||||
sudo swapon -a
|
||||
```
|
||||
|
||||
⚠️ **Avertissement** : `swapoff -a` charge tout le contenu du swap en RAM. Si la RAM disponible est insuffisante, le système peut devenir instable ou déclencher l'OOM killer. Vérifier au préalable avec `free -h` que `used` du swap est inférieur à `available` de la RAM.
|
||||
|
||||
## Tuer tous les processus par nom
|
||||
|
||||
```bash
|
||||
sudo killall teamviewerd
|
||||
```
|
||||
|
||||
Sous Linux (paquet `psmisc`), `killall` envoie par défaut le signal `SIGTERM` à tous les processus correspondant au nom donné. Si le processus refuse de se terminer :
|
||||
|
||||
```bash
|
||||
sudo killall -9 teamviewerd # SIGKILL, arrêt forcé
|
||||
```
|
||||
|
||||
**Alternative recommandée** : `pkill`, plus souple (match sur motif, options de filtrage par utilisateur, terminal, etc.) et plus portable :
|
||||
|
||||
```bash
|
||||
sudo pkill teamviewerd
|
||||
sudo pkill -9 teamviewerd
|
||||
sudo pkill -u alice firefox # tous les firefox de l'utilisateur alice
|
||||
```
|
||||
|
||||
⚠️ Attention : sur certains Unix non-Linux (Solaris historiquement), `killall` tue **tous** les processus du système. Sur Linux le comportement est sain, mais `pkill` reste plus prévisible si vos scripts doivent être portables.
|
||||
````
|
||||
|
||||
## Suggestion de version remaniée
|
||||
Quelques notes sur ce que j'ai changé :
|
||||
|
||||
Une structure plus cohérente :
|
||||
- Titre principal élargi pour refléter le contenu réel
|
||||
- Ajout d'un court paragraphe d'intro qui dit *pourquoi* on ferait ça
|
||||
- Ajout de `sync` avant les écritures dans `drop_caches`
|
||||
- Avertissement sur `swapoff -a` et la RAM
|
||||
- Section `killall` étoffée avec `SIGTERM`/`SIGKILL`, `pkill`, et la note de portabilité
|
||||
- Tous les blocs de commandes en *fenced code blocks* avec coloration `bash`
|
||||
- Hiérarchie de titres cohérente (`#` puis `##`)
|
||||
|
||||
- `#` Gestion mémoire et processus sous Linux
|
||||
- `##` Vider les caches mémoire (avec explication de ce que ça fait *vraiment*)
|
||||
- `##` Désactiver/réactiver le swap (avec avertissement RAM)
|
||||
- `##` Tuer des processus par nom (avec `pkill` en alternative)
|
||||
|
||||
En résumé : le contenu est juste mais l'article ressemble à des notes personnelles plus qu'à un article publiable. Avec un peu de mise en contexte, des avertissements sur les pièges, et une hiérarchie de titres cohérente, ça deviendrait une référence utile.
|
||||
Tu veux que je le sauvegarde dans un fichier `.md` téléchargeable ?
|
||||
Reference in New Issue
Block a user