85 votes

Puis-je limiter manuellement le %CPU utilisé par un processus ?

J'aimerais limiter le temps CPU consacré à certains processus (par exemple Firefox, Safari, ...).

Je n'arrive pas à comprendre pourquoi de tels programmes, même lorsqu'ils ne sont pas utilisés (rien ne se charge, aucune animation, ils tournent en arrière-plan, ...), sont si gourmands en ressources. Pourquoi un navigateur doit-il consommer 50% ou plus de mon CPU ? Puis-je le limiter à 10 % ?

0 votes

Je parviens à peine à faire en sorte que Safari utilise 10 % de mon processeur avec une vingtaine de fenêtres ouvertes. pourquoi l'application utilise ces ressources et la réparer, plutôt que de simplement limiter les ressources qu'elle peut utiliser.

1 votes

@benwiggy - Luky you. Le fait est qu'une application peut se comporter comme bon lui semble, par exemple elle peut prétendre utiliser toutes les ressources disponibles dans le système, volontairement ou à cause d'un bug. C'est le système d'exploitation qui doit contraindre chaque application afin que tous les processus aient leur part du temps CPU. Et l'utilisateur doit être en mesure de faire savoir au système d'exploitation quels processus ont la priorité en vertu de la loi sur la protection des données. son point de vue. Il faut également tenir compte du fait que de nombreux ordinateurs fonctionnent avec des piles... la consommation d'énergie est donc un autre facteur à prendre en considération.

2 votes

Il convient de noter que l'utilisation à 100 % du processeur sur un Macbook Air 2020 correspond en fait à une utilisation de 12,5 % (un processeur à 8 cœurs a une capacité de 800 %).

48voto

cputhrottle est l'outil dont vous avez besoin. Vous pouvez l'installer avec Homebrew .

Vous pouvez surveiller une série de processus par nom en exécutant le script de Bash ci-dessous. Je ne suis pas tout à fait sûr de la façon de transformer cela en un élément de connexion, car cputhrottle nécessite des droits de superutilisateur. Exécutez-le comme un script, dans un flux de travail Automator, peu importe :

# Get the Process/App names from Activity Monitor and put them here
apps=("AppOne" "AppTwo" "AppThree")
# Set the respective limits here
limits={30 40 50)

while true; do
  for app in ${apps}; do
    for limit in ${limits}; do
      for pid in $(pgrep ${app}); do
        sudo /path/to/cputhrottle ${pid} ${limit}
      done
    done
  done
done

[Modifié]

J'ai ajouté une version différente pour ce script (un bash script), ce qui pourrait être utile pour les personnes cherchant à limiter le CPU pour plusieurs applications.

Ce nouveau script vous permet également de spécifier une liste contenant le nom de l'application et la limite de CPU pour celle-ci.

La principale différence est que vous pouvez ajouter une limite de processeur par application, et qu'il ne s'exécutera qu'une seule fois par application. J'ai aussi ajouté l'option de tuer tous les fichiers cputhrottle processus.

Le script suppose que les deux cputhrottle y pidof sont installés avant de l'exécuter.

#!/bin/bash

if [[ $EUID > 0 ]]; then
  echo "Please run this script as root/sudo"
  exit 1
fi

# Pass --kill as argument to kill all running cputhrottles
if [ $1 = "--kill" ]; then  
  echo "Looking for running cputhrottles..."
  pids=`pidof cputhrottle`
  for pid in ${pids}; do
    echo "> Killing PID ${pid}"
    sudo kill ${pid}
  done
  echo "Done!"
  exit 0
fi

declare -a applications

# Syntax='application;max-cpu'
applications[0]='Chrome;40'
applications[1]='Firefox;50'
applications[2]='pycharm;40'
applications[3]='webstorm;40'
applications[4]='Safari;35'

for i in "${applications[@]}"; do
  app=(${i//;/ })
  app_name=${app[0]}
  cpu_limit=${app[1]}

  printf "\nLooking for ${app_name}...\n"
  pids=`pidof ${app}`
  for pid in ${pids}; do
    echo "> PID=${pid}, CPU=${cpu_limit}"
    sudo cputhrottle ${pid} ${cpu_limit} &
  done
done

printf "\nDone!\n"
echo "Run this script passing '--kill' as argument to remove all cputhrottles."

Source :

17 votes

Comme indiqué dans un autre commentaire , cputhrottle 's forumula a été supprimé de Homebrew le Feb 17, 2019 parce que il ne fonctionne plus . Yosemite a été la dernière version de MacOS à prendre en charge la fonction cputhrottle .

0 votes

@Casimir et maintenant, que faire ?

0 votes

@PeterSamokhin Désolé, je ne connais pas d'alternative. Mais je n'ai pas cherché récemment.

18voto

Nicholas Smith Points 2353

Vous pouvez en effet ! Il y a le CPUThrottle qui permet de spécifier un PID à restreindre.

Notez qu'ils essaient d'utiliser cette quantité pour une raison, c'est un outil utile mais vous découvrirez si cela vous rendra meilleur ou pire au jour le jour.

2 votes

Intéressant. Mais avec cet utilitaire, je dois lancer un programme, trouver son (ses) PID et utiliser manuellement cputhrottle. A chaque fois que je le lance. Existe-t-il quelque chose qui me permette de dire au système : "A partir d'aujourd'hui, toujours exécuter ce programme avec un maximum de 25% de CPU" ?

0 votes

Pour autant que je sache, non, je n'ai jamais rencontré que CPUThrottle.

2 votes

404 Fichier non trouvé

17voto

Noam Points 166

Ce n'est pas exactement ce que vous vouliez, mais, en ce qui concerne google drive et chrome ce qui a fait l'affaire pour moi :

Google Drive ("Backup and Sync")

  • dé-prioriser :

    for f in $(pgrep 'Backup and Sync'; pgrep 'FinderSyncAPIExtension'); do renice +20 -p $f; done
  • de retour à la normale :

    for f in $(pgrep 'Backup and Sync'; pgrep 'FinderSyncAPIExtension'); do renice 0 -p $f; done

Cromo

  • dé-prioriser tous les processus en cours :

    for f in $(pgrep 'Chrome'); do renice +20 -p $f; done
  • remettre à la normale tous les processus en cours :

    for f in $(pgrep 'Chrome'); do renice 0 -p $f; done

2 votes

+1 - C'est la réponse la plus correcte car "nice" fait partie du système d'exploitation et est directement lié à l'algorithme utilisé par l'ordonnanceur du noyau pour décider quel processus obtient la prochaine tranche de temps CPU. Il s'agit de toujours fonctionne sur n'importe quel système Unix ou Linux et ne dépend d'aucun add-on tiers. L'avantage est que ces processus peuvent utiliser plus de CPU si ils ne sont pas en concurrence avec d'autres processus pour le temps d'utilisation de l'unité centrale.

14voto

mike Points 1801

Bien que ce ne soit pas une réponse directe à la question de l'OP, si vous avez un problème avec un processus particulier qui prend trop de temps CPU, et rend votre ordinateur inutilisable, et que vous ne vous souciez pas du temps que ce processus prend pour terminer la tâche sur laquelle il travaille, vous pouvez utiliser la fonction renice pour modifier la priorité de ce processus, afin qu'il se comporte bien (d'où son nom).

Tout d'abord, vous devez trouver le PID du processus qui utilise les ressources du CPU. Vous pouvez le faire soit dans le moniteur d'activité, soit dans Terminal.app avec la commande ps par exemple, pour trouver le PID du navigateur Safari, tapez :

MacBook:~  ps -ef | grep Safari
  501 17452   263   0 11:36pm ??         4:15.60 /Applications/Safari.app/Contents/MacOS/Safari

La deuxième ligne ci-dessus est la sortie, et le PID est 17452 dans ce cas particulier.

Ensuite, la tâche suivante consiste à modifier la priorité du processus (disons qu'il s'agit de Safari que nous voulons faire se comporter de manière agréable). Pour ce faire, dans Terminal.app, tapez :

MacBook:~  renice -n 10 -p 17452

Le site -n L'option change le niveau de gentillesse en ajoutant 10 à la valeur actuelle (0 par défaut). Les valeurs sont comprises entre -20 et 20, la valeur la plus basse signifiant la priorité la plus élevée. En tant qu'utilisateur ordinaire, vous pouvez utiliser les valeurs 0 à 20. Pour attribuer une valeur négative, vous devez disposer des privilèges de Root (par exemple, utilisez l'option sudo commande). Pour en savoir plus nice y renice en tapant man nice y man renice dans Terminal.app.

nice y renice ne limitent pas le pourcentage de l'unité centrale disponible pour une application donnée, ils permettent cependant de modifier la priorité de planification, ou en d'autres termes, la part du temps de l'unité centrale qu'un processus obtiendra. Tout ceci est relatif à la charge CPU de votre système, donc si le système est sous-utilisé, vous ne verrez probablement aucune différence.

0 votes

Existe-t-il un moyen de connaître la priorité actuelle d'un processus ?

0 votes

Utiliser top ou htop pour afficher la valeur actuelle d'un processus. (brew install htop), (sudo apt install htop). Vous verrez l'une des colonnes contenant la valeur.

9voto

John Wells Points 91

Le lien que Nicholas Smith a posté ne fonctionne plus. J'ai donc trouvé une autre application qui fait l'affaire pour les personnes qui le recherchent à nouveau. L'application s'appelle Apppolice.

http://www.macupdate.com/app/mac/49836/apppolice

3 votes

Comme AppPolice, il y a AppTamer ( stclairsw.com/AppTamer ). Une mise en garde : au moment où j'écris ce commentaire, AppTamer n'est pas encore compatible avec OSX Sierra.

1 votes

Oh là là, quelle trouvaille ! Je viens d'installer AppTamer. J'ai le plaisir de vous annoncer qu'il fonctionne fantastiquement bien. Je l'utilise pour garder le nouveau StarCraft remastered en ligne quand je sors par alt-tab. Oh et j'ai oublié de mentionner que j'utilise MacOS Sierra 10.12.6. Merci pour la suggestion !

0 votes

Apppolice a été supprimé.

LesApples.com

LesApples est une communauté de Apple où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres utilisateurs d'appareils Apple, poser vos propres questions ou résoudre celles des autres.

Powered by:

X