web-dev-qa-db-fra.com

Comment empêcher les programmes en cours de consommer tout RAM et CPU?

J'ai un problème avec la gestion des ressources d'Ubuntu. Il arrive fréquemment que certains programmes tels que le navigateur Google Chrome utilisent 100% du processeur et la plupart des mémoires de mes ordinateurs portables.

Je veux avoir un système d'exploitation réactif tout le temps, cela signifie que je veux être en mesure de basculer entre les programmes et de déplacer ma souris sur l'écran ou de passer à un tty et de donner des commandes au système d'exploitation. Par conséquent, je cherche un moyen de configurer le système d'exploitation pour réserver, disons 10% des ressources système pour lui-même. Actuellement, Ubuntu ne se comporte pas de cette façon, souvent chrome consomme tout mon processeur et toute sa mémoire, puis le système ne répond plus, et bien sûr, je ne peux pas attendre plus d'une minute ou deux, je dois donc appuyer longtemps bouton.

Existe-t-il un moyen de faire en sorte qu'Ubuntu soit toujours réactif? Au moins dans la mesure où je peux tuer le programme gourmand en ressources? (Je sais que le noyau finira par tuer certains programmes pour libérer de l'espace, mais je veux le forcer à le faire plus rapidement ou à réserver plus de ressources pour lui-même)

Version: UBUNTU 14.04
~$ uname -a
Linux spielplatz 3.13.0-45-generic #74-Ubuntu SMP Tue Jan 13 19:36:28 UTC 2015 x86_64 x86_64 x86_64 GNU/Linux

CPU: Intel(R) Core(TM) i5-3210M CPU @ 2.50GHz
RAM: 8GB

Mise à jour (8 octobre 2017)

La meilleure solution que j'ai trouvée jusqu'à présent est d'utiliser cgroups. Il y a un Gist pour cela.

5
Mehdi Sadeghi

J'ai déjà utilisé cpulimit pour "étrangler" les programmes gourmands en ressources CPU qui étaient hors de contrôle auparavant (le plugin Xfce4 Mailwatch est bloqué et récupère parfois 100% du processeur). cpulimit est un:

outil pour limiter l'utilisation du processeur d'un processus

cpulimit est un programme simple qui tente de limiter l'utilisation de la CPU d'un processus (exprimé en pourcentage et non en temps CPU). Ceci est utile pour contrôler les travaux par lots, lorsque vous ne voulez pas qu'ils consomment trop de ressources processeur. Il n’agit pas sur la valeur de Nice ni sur d’autres priorités, mais sur l’utilisation réelle du processeur.
En outre, il est capable de s’adapter de manière dynamique et rapide à la charge globale du système.

Cela fonctionne en surveillant le processus cible et en envoyant "les signaux SIGSTOP et SIGCONT à un processus, à la fois pour vérifier qu'il peut le contrôler et pour limiter la quantité moyenne de CPU qu'il consomme." Voir:

Cela devrait rendre le reste de votre système d'exploitation plus réactif, mais je l'ai essayé sous Firefox et il a tendance à le rendre beaucoup moins réactif. Il se peut donc que ce ne soit pas la meilleure réponse pour le navigateur Chrome. La recherche de moyens d’accélérer Chrome lui-même pourrait être plus fructueuse.

Si vous voulez juste un bon moyen de voir combien de CPU et RAM sont utilisés, et quels processus les utilisent, je vous conseillerais un programme de surveillance du système (comme top, htop, Je préfère conky ), puis, quand vous voyez quelque chose manger tout votre cpu ou ram, vous pouvez fermer/redémarrer, etc.


Si vous souhaitez savoir quels programmes sont programmés pour s'exécuter en premier, examinez la priorité de planification et la "gentillesse". Vous pourriez peut-être faire Chrome agir "plus gentil" sans le paralyser.
Voici un extrait de info coreutils 'Nice invocation':

'Nice' imprime la "gentillesse" d'un processus ou exécute une commande avec une gentillesse modifiée. "gentillesse" affecte la façon dont le processus est planifié dans le système.

Les valeurs de gentillesse vont au moins de -20 (le processus a une priorité élevée et obtient plus de ressources, ralentissant ainsi les autres processus) jusqu'à 19 (le processus a une priorité inférieure et s'exécute lentement, mais a moins d'impact sur la vitesse des autres processus en cours d'exécution). Certains systèmes peuvent avoir une gamme plus large de valeurs de gentillesse; à l'inverse, d'autres systèmes peuvent imposer des limites plus restrictives. Une tentative de définition de la gentillesse en dehors de la plage prise en charge est traitée comme une tentative d'utilisation de la valeur prise en charge minimale ou maximale.

Une gentillesse ne doit pas être confondue avec une priorité de planification, qui permet aux applications de déterminer l’ordre dans lequel les threads sont planifiés pour être exécutés. Contrairement à une priorité, une gentillesse est simplement un conseil pour le planificateur, qu’il est libre d’ignorer. POSIX définit également le comportement de 'Nice' en termes de "valeur de Nice", qui est la différence non négative entre une gentillesse et une gentillesse minimale. Bien que "Nice" soit conforme à POSIX, sa documentation et ses diagnostics utilisent le terme "gentillesse" pour des raisons de compatibilité avec les pratiques historiques.

Et voici quelques liens utiles sur la planification


Et muru comment/post sur Cgroups (sur ArchWiki) semble bon, à propos de la limitation du bélier, on dirait que cela pourrait aussi limiter les cœurs de la CPU et les "actions" ( "Par défaut, tous les groupes ont 1024 actions. Un groupe de 100 actions obtiendra environ 10% du temps CPU" ).

Le premier paragraphe de l'article ArchWiki mentionne également cette option potentiellement utile, bien que je pense qu'elles sont principalement destinées à limiter les utilisateurs/groupes, voir: man pam_limits & man limits.conf

3
Xen2050