Comment faire pour que `apt-get upgrade` utilise moins de ressources?

26

Lorsque je cours sudo apt-get upgradeavec beaucoup de packages sur mon ordinateur portable bas de gamme, j'obtiens un ralentissement du système perceptible, parfois avec un gel d'écran pouvant aller jusqu'à 3 secondes.

Existe-t-il un moyen de marquer ce travail comme très faible priorité, c'est-à-dire d'utiliser très peu de CPU, MEM et disque dur? Je ne me soucie pas vraiment si cela prendrait apt-get upgradedeux heures de plus pour terminer, je veux juste continuer à travailler sans les perturbations pendant la mise à niveau.

user1350992
la source

Réponses:

26

La commande nicepeut être utilisée pour manipuler les priorités de planification du processeur du processus . La commande attribue une valeur de "gentillesse" de -20 (le plus important) à +19 (le moins important) au processus. Root peut attribuer n'importe quelle valeur, les autres utilisateurs uniquement les positifs (importance mineure). La valeur par défaut est 0.

nice -n <niceness> <command>

Pour définir la priorité d'une commande apt-get sur la plus petite valeur, vous pouvez utiliser la commande

sudo nice -n 19 apt-get upgrade

Pour définir la priorité d'un processus déjà en cours d'exécution, la commande renicepeut être utilisée:

renice -n <niceness> -p <pid>

Edit: Merci à @David d'avoir mentionné la ionicecommande, qui vous permet de manipuler la priorité d'E / S du disque . Il peut mettre un processus en trois classes différentes:

  • Inactif ne donne le temps du disque de processus, si aucun autre processus ne le réclame pour le moment.
  • Meilleur effort (classe par défaut). Cela vous permet d'attribuer des priorités de 0 à 7, où 0 est le plus important et 7 le moins. Vous pouvez essayer d'attribuer -n 7le niveau de priorité.
  • Les processus en temps réel sont gérés avant tout, suspendant les E / S disque pour les autres processus, dès qu'ils en ont besoin. À utiliser avec précaution!

IOnice combine la syntaxe de nice et renice:

ionice [-c class] [-n level] command             #To start a new process
ionice [-c class] [-n level] -p pid              #To change a running process

Les deux commandes peuvent être combinées, par exemple

sudo ionice -n 7 nice -n 19 apt-get upgrade      #Omitting the -c switch will assign Best-effort
sudo nice -n 19 ionice -n 7 apt-get upgrade
nice -n 19 ionice -n 7 sudo apt-get upgrade
...
s3lph
la source
6
Je suis surpris que cela ait eu autant de votes positifs. la mise à niveau d'apt-get est liée aux E / S!
Joshua
3
que diriez-vous ionice?
David LeBauer
1
Donc, pour clarifier, le sudodans votre commande n'est pas pour nice, mais pour apt-getlui-même? Il semble que ça nice -n 19 sudo apt-get upgrademarche aussi pour moi. Y a-t-il une différence importante?
wchargin
1
@WChargin sudo nice apt-getfonctionne bien en tant que root et permettra de définir des priorités inférieures à 0. apt-get fonctionnera toujours en tant que root. nice sudo apt-getfonctionnera bien en tant qu'utilisateur actuel, et n'autorisera donc que des priorités supérieures ou égales à 0. apt-get sera démarré en tant que root.
s3lph
1
@David J'ai ajouté ionice à ma réponse.
s3lph