GNU/Linux >> Tutoriels Linux >  >> Linux

Le système se bloque lorsqu'il manque de mémoire

Il est possible d'appeler OOM-killer (out of memory killer) directement par combinaison clavier :

SysRq-F

La touche SysRq est généralement combinée avec la touche PrtSc sur les claviers.

OOM-killer tue certains processus et le système redevient réactif.

Merci Raman pour ses conseils sur cette fonctionnalité dans les commentaires ci-dessus.

PS :Cela m'a beaucoup aidé. Je suis d'accord avec l'opinion que c'est le conseil le plus utile à propos de ce problème s'il est causé par Chrome ou tout autre logiciel gourmand en mémoire. Mais vous devez garder à l'esprit que OOM-killer peut tuer un processus très important, utilisez-le avec précaution.


L'état naturel des choses est que les données d'application sont dans la RAM et que les fichiers sont sur le disque.
L'état idéal des choses, en termes de performances, est que les données fréquemment utilisées se trouvent dans la RAM et que les données qui ne sont pas nécessaires pour le moment se trouvent sur le disque.
Sur un système normal, le noyau fait deux choses pour tenter d'atteindre cet idéal :

  • Les données d'application qui n'ont pas été utilisées pendant un certain temps peuvent être déplacées sur le disque :c'est le swap.
  • Les données des fichiers qui ont été utilisés récemment sont conservées dans la RAM :il s'agit du cache disque (pour les données lues sur le disque) et des tampons de disque (pour les données qui sont sur le point d'être écrites sur le disque).

Sur un système typique, une partie importante de la RAM est consacrée au cache et aux tampons (50 % est un chiffre typique). Étant donné que la RAM est une ressource finie, cela peut nécessiter le déplacement de certaines données d'application à échanger (l'échange n'est nécessaire que s'il existe une meilleure façon d'utiliser la RAM).

Sur un système sans échange, il y a un moment où les données d'application utilisent presque toute la RAM, et il ne reste donc pratiquement plus de place pour le cache. Ensuite, le système risque d'être lent. Le noyau ne commencera pas à tuer les applications tant qu'il n'y est pas vraiment obligé. Tant que les applications ne remplissent que 99% de la mémoire disponible, le système continue, mais très lentement car les données des fichiers doivent être chargées et rechargées à partir du disque tout le temps. Avec les mêmes applications en cours d'exécution, le système serait plus rapide avec l'échange à ce stade.

Pour en savoir plus sur ce problème, consultez cette discussion sur lkml et cet article de blog.

Je ne connais pas de moyen direct de dire au noyau de réserver une quantité minimale de RAM pour le cache disque. Vous pouvez configurer une petite partie de votre RAM comme espace d'échange, peut-être même compressé. Il existe des rapports de réussite sur ce front, bien que je ne donne aucune garantie dans votre cas particulier.


Récemment, j'ai trouvé une solution à mon problème.

Étant donné que le tueur de MOO Linux n'est pas capable de faire son travail correctement, j'ai commencé à utiliser un tueur de MOO en espace utilisateur :earlyoom. C'est écrit en C, assez configurable et ça marche comme un charme pour moi.

J'ai aussi entendu parler d'alternatives, comme OOMD de Facebook, développées pour fonctionner sur leurs serveurs, mais je n'ai pas essayé celle-ci


Linux
  1. Statistiques système :commandes de statistiques Linux à connaître

  2. Comment empêcher le système de ne plus répondre lors d'un battement (hors de Ram) ?

  3. Vérifiez la charge du système sous Linux

  4. FAQ sur le disque système et le disque de données

  5. Programme Python consommant de la RAM

Gestion du swap dans le système Linux moderne

Trouver la taille de la RAM sous Linux

Pourquoi mon système n'affiche-t-il que 3,2 Go de RAM alors que j'ai définitivement 4,0 Go

Comment puis-je tester la RAM pour la corruption des données sur un système basé sur ARM ?

Linux :Échangez en plus gros morceaux

Pourquoi Swap est-il utilisé lorsqu'il reste beaucoup de mémoire libre ?