Je pense que ce n'est pas un problème si rare: un processus alloue des quantités massives de mémoire (que ce soit en raison d'un bug de fuite de mémoire, car vous essayez de traiter un fichier d'entrée incroyablement volumineux, ou autre). La RAM se remplit et à un moment donné, Linux doit basculer pour échanger. Eh bien, parfois ce n'est que le dernier recours: si j'ai un calcul coûteux, je ne veux pas perdre de données si vers la fin je manque de RAM.
Plus souvent cependant (selon mon expérience), la consommation de mémoire est illimitée, par un processus voyou, peut-être buggé. C'est-à-dire que je ne me retrouve pas seulement avec des données moins urgentes déplacées pour l'échange, mais le système d'exploitation est obligé d'échanger des charges de données de manière panique. Et cela, malheureusement, n'interrompt pas seulement le processus incriminé, mais peut également entraîner la quasi-totalité du système (ce n'est plus aussi mauvais sur les machines avec SSD, mais OTOH, cela me fait me demander si l'écriture de gigaoctets et de gigaoctets de données poubelles peut nuire à long terme aux cellules flash).
Jusqu'à ce que je remarque le problème et que je tue manuellement le processus (une fois que cela a pris quelques minutes avant que je ne me connecte à un terminal virtuel!), La moitié de ma session de course est en swap, et je dois attendre un bon moment jusqu'à ce que le système fonctionne correctement encore.
Il existe une solution draconique au problème: appliquer une limite de mémoire dure. Mais faire cela à l'échelle du système tuerait parfois des processus dont j'ai plutôt besoin, et si je dois le faire manuellement ulimit
avant de commencer un processus offensant ... eh bien, j'oublierai souvent jusqu'à ce qu'il soit trop tard.
Types de solutions possibles Je serais plus satisfait de:
- Si un processus dépasse une certaine utilisation de la mémoire, il est artificiellement limité afin que le reste du système reste réactif.
- Si un processus dépasse une certaine utilisation de la mémoire, c'est
SIGSTOP
ped donc j'ai le temps de comprendre quoi faire ensuite. - Si un processus approche de la limite de RAM, je reçois un avertissement avant le début du grand échange.
Existe-t-il un moyen d'obtenir un tel comportement, ou similaire?
ulimit
pour laquelle.