Posso limitar manualmente a% da CPU usada por um processo? -- acos campo com battery campo com performance camp apple Relacionado O problema

Can I manually limit the %CPU used by a process?


67
vote

problema

português

Eu gostaria de limitar a quantidade de tempo de CPU dedicado a certos processos (por exemplo, Firefox, Safari, ...).

Eu não consigo entender por que esses programas, mesmo quando não forem usados ​​(nada carregando, sem animações, correndo no fundo, ...), são tão famintas de recursos. Por que um navegador deve comer 50% ou mais da minha CPU? Posso limitá-lo a 10%?

english

I would like to limit the amount of CPU time dedicated to certain processes (e.g. Firefox, Safari, ...).

I can't understand why such programs, even when not used (nothing loading, no animations, running in the background, ...), are so resource hungry. Why must a browser eat 50% or more of my CPU? Can I limit it to 10%?

        
   
   

Lista de respostas

10
 
vote
vote
Melhor resposta
 

Não é exatamente o que você queria, mas, em relação ao Google Drive e Chrome, o que fez o truque para mim:

google drive ("backup e sincronização")

  • de-prioridade:

      for f in $(pgrep 'Backup and Sync'; pgrep 'FinderSyncAPIExtension'); do renice +20 -p $f; done    
  • De volta ao normal:

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

cromo

  • priorize todos os processos atuais:

      for f in $(pgrep 'Chrome'); do renice +20 -p $f; done    
  • Deixou de volta ao normal todos os processos atuais:

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

Its not exactly what you wanted, but, in regards of google drive and chrome this what did the trick for me:

Google Drive ("Backup and Sync")

  • de-prioritize:

    for f in $(pgrep 'Backup and Sync'; pgrep 'FinderSyncAPIExtension'); do renice +20 -p $f; done 
  • set back to normal:

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

Chrome

  • de-prioritize all current processes:

    for f in $(pgrep 'Chrome'); do renice +20 -p $f; done 
  • set back to normal all current processes:

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

cputhrottle é a ferramenta que você precisa. Você pode instalá-lo com homebrew .

Você pode monitorar uma série de processos pelo nome executando o script bash abaixo. Eu não tenho certeza de como transformar isso em um item de login desde cputhrottle requer permissões de superusuário. Execute-o como um script, em um fluxo de trabalho automático, seja qual for:

  # 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    

[editado]

Adicionei uma versão diferente para este script (um bash script), que pode ser útil para as pessoas que procuram limitar a CPU para vários aplicativos.

Este novo script também permite especificar uma lista contendo o nome do aplicativo e o limite da CPU para ele.

A principal diferença é que você pode adicionar limite de CPU por aplicativo e será executado apenas uma vez por aplicativo. Eu também adicionei a opção de matar todos cputhrottle processos.

O script pressupõe que ambos cputhrottle e for f in $(pgrep 'Backup and Sync'; pgrep 'FinderSyncAPIExtension'); do renice 0 -p $f; done 0 são instalados antes de executá-lo.

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

Fonte:

  • https://gist.github.com/golimpio/692145a19666582F84E0E66582f844E0E66BB5DD2B2B
 

cputhrottle is the tool you need. You can install it with Homebrew.

You can monitor a series of processes by name by running the Bash script below. I'm not quite sure how to turn this into a login item since cputhrottle requires superuser permissions. Run it as a script, in an Automator workflow, whatever:

# 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 

[Edited]

I've added a different version for this script (a bash script), which might be useful for people looking for limiting the CPU for multiple applications.

This new script also allows you to specify a list containing the application name and the CPU limit for it.

The main difference is that you can add cpu limit per application, and it will run only once per application. I've also added the option for killing all cputhrottle processes.

The script assumes that both cputhrottle and pidof are installed before running it.

#!/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:

  • https://gist.github.com/golimpio/692145a19666582f84e0e66bb5dd2b2b
 
 
       
       
17
 
vote

Você pode de fato! Há cpponhrottle , que permite especificar um PID para restringir .

Nota, eles estão tentando usar tanto por um motivo, é uma ferramenta útil, mas se for melhor ou pior para você em um dia a dia será algo que você descobre.

 

You can indeed! There's CPUThrottle, which allows to specify a PID to restrict.

Note, they're trying to use that much for a reason, it's a useful tool but whether it'll make it better or worse for you on a day to day will be something you discover.

 
 
       
       
13
 
vote

Embora não seja uma resposta direta para a pergunta da OP, se você estiver tendo um problema com um determinado processo ocupando muito do seu tempo de CPU, e tornar seu computador inutilizável, e você não se importa com quanto tempo esse processo leva Para concluir a tarefa, você está funcionando, você pode usar o renice para alterar a prioridade desse processo, tornando-se bem (daí o nome).

Primeiro, você precisa encontrar o PID do processo que está usando os recursos da CPU. Você pode fazer isso no monitor de atividades ou no Terminal.app com o comando ABCDEFGHIJKLMNABCDEFGHIJKLMN1 - e. Para encontrar o PID do navegador Safari, digite:

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

A segunda linha acima é a saída, e o PID é 17452 neste caso específico.

Então, a próxima tarefa é alterar a prioridade do processo (digamos que seja o safári que queremos fazer comportar bem). Para fazer isso, no terminal.app Tipo:

  MacBook:~😈  renice -n 10 -p 17452    

O ABCDEFGHIJKLMNABCDEFGHIJKLMN4 Opção altera o nível agradável adicionando 10 ao valor atual (0 por padrão). A gama de valores são -20 a 20, com menor valor significativo maior prioridade. Como um usuário comum, você pode usar valores de 0 a 20. Para atribuir um valor negativo, você precisa ter privilégios raiz (por exemplo, usar sudo comando). Leia mais sobre nice e renice digitando man nice e man renice em terminal.app.

ps0 e ps1 Não limite a porcentagem da CPU disponível para um determinado aplicativo per se, eles, no entanto, permitem alterar a prioridade de agendamento, ou em outras Palavras quanto do tempo de CPU um processo vai conseguir. Isso tudo é relativo à carga da CPU em seu sistema, portanto, se o sistema estiver sob utilizado, você provavelmente não verá nenhuma diferença.

 

Although not a direct answer to the OP's question, if you're having an issue with a particular process taking up too much of your CPU time, and making your computer unusable, and you don't mind how long that process takes to finish the task it's working on, you can use the renice to alter the priority of that process, making it behave nicely (hence the name).

First, you need to find the PID of the process that's using up the CPU resources. You can either do that in Activity Monitor, or in Terminal.app with the ps command - e.g. to find the PID of the Safari browser, type:

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

The second line above is the output, and the PID is 17452 in this particular case.

Then, the next task is to change the priority of the process (let's say it's Safari we want to make behave nicely). To do this, in Terminal.app type:

MacBook:~xf0x9fx98x88  renice -n 10 -p 17452 

The -n option changes the nice level by adding 10 to the current value (0 by default). The range of values are -20 to 20, with lowest value meaning highest priority. As an ordinary user, you can use values 0 to 20. To assign a negative value, you need to have root privileges (e.g. use sudo command). Read more about nice and renice by typing man nice and man renice in Terminal.app.

nice and renice don't limit the percentage of the CPU available to a given application per se, they do however allow to change the scheduling priority, or in other words how much of the CPU time a process will get. This is all relative to the CPU load on your system, so if the system is under utilised, you most likely won't see any difference.

 
 
   
   
7
 
vote

O link que Nicholas Smith postou não funciona mais. Então eu encontrei um outro aplicativo que faz o truque para as pessoas que estão procurando novamente. O aplicativo chama Apppolice.

http://www.macupdate.com/app/mac/49836/apppolice < / a>

 

The link that Nicholas Smith posted doesn't work anymore. So I found one other app that does the trick for the people who are searching it again. the app calls Apppolice.

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

 
 
         
         
6
 
vote

Há um simples um liner para fazer tudo isso:

  ps2   

Escreva seu nome de aplicativo em vez de cromo e porcentagem desejada em vez de 10 e você é bom para ir!

 

There is a simple one-liner for doing all that:

ps axu | grep Chromium | grep -v grep | awk '{print $2}' | sudo xargs -n 1 -I'{}' sh -c 'cputhrottle {} 10 &' 

Write your app name instead of Chromium and desired percentage instead of 10 and you're good to go!

 
 
 
 
5
 
vote

Isto é baseado fora de uma resposta anterior, mas adicionando a armadilha para CTRL + C para garantir que o processo que está sendo acelerado é deixado em um estado de continuidade e adicionando ps3 para que este script sairá de forma limpa O próprio processo sai:

  ps4   
 

This is based off a previous answer, but adding the trap for ctrl+c to make sure the process being throttled gets left in a continue state, and adding set -e so this script will exit cleanly if the process itself exits:

trap ctrl_c_fn INT  function ctrl_c_fn() {     echo "caught CTRL-C, exiting"     kill -SIGCONT $pid     exit }  echo "enter process id" read pid echo "press Ctrl-C to exit"  set -e  while true; do     kill -SIGSTOP $pid     sleep 0.009     kill -SIGCONT $pid     sleep 0.001 done 
 
 
3
 
vote

Este sh trabalhou para mim

  ps5   
 

this sh worked for me

echo "enter process id" read pid echo "press Ctrl-C to exit"  while true; do     kill -SIGSTOP $pid     sleep 0.009     kill -SIGCONT $pid     sleep 0.001 done 
 
 
3
 
vote

Este é o meu script final, mantenha limpo o comando cpirphrottle Execute apenas novo se não existir

  ps6   
 

This is my final script, keep clean the command cputhrottle only execute new one if doesn't exist

#!/bin/bash  ### # setup cputhrottle if doesn't exists ### set_service_cpu_limit(){     service_pid=$(pgrep $1)     limit=$2     if [[ ! -z $service_pid  ]]; then         service_cpu=$(ps aux | grep "sudo cputhrottle $service_pid $limit" | grep -v grep | wc -l)         if [[ ! $service_cpu -gt 0 ]]; then             sudo cputhrottle $service_pid $limit &         fi     fi }  ### # main loop ### while true; do     set_service_cpu_limit bzfilelist 2     set_service_cpu_limit bztransmit 2     sleep 0.5 done 
 
 
3
 
vote

O script Dimitri escreveu funciona bem (em macos), mas continua a funcionar com erros após o aplicativo ser fechado. Eu mudei para acabar (com uma mensagem de erro sobre PID não encontrada):

  ps7   
 

The script Dimitri wrote does work well (on macOS), but it keeps running with errors after the application is closed. I changed it to make it finish (with an error message about PID not found):

echo "enter process id" read pid echo "press Ctrl-C to exit"  while kill -SIGSTOP $pid; do     sleep 0.009     kill -SIGCONT $pid     sleep 0.001 done 
 
 
 
 
1
 
vote

Eu uso apppolice . É um pouco instável e desajeitado, mas como não há outras opções e os problemas são menores, acho que é uma solução decente. Funciona em Catalina.

 

I use AppPolice. It is a bit unstable and clunky but since there are no other options and the problems are minor I think it is a decent solution. Works on Catalina.

 
 
   
   
1
 
vote

cputhrottle (consulte as respostas da FNY e Nicholas Smith) funciona no MacOS 10.15 Contanto que você assine o executável.

Você pode fazer isso simples e rapidamente seguindo as etapas listadas aqui: https://web.archive.org/web/20191223180139/https://sourceware.org/gdb/wiki/permissionsdarwin

Você pode baixar cputhrottle aqui: http: // www. willnolan.com/cputhrottle/cputhrottle.html

 

cputhrottle (refer to fny and Nicholas Smith's answers) works on macOS 10.15 as long as you sign the executable.

You can do so simply and quickly by following the steps listed here: https://web.archive.org/web/20191223180139/https://sourceware.org/gdb/wiki/PermissionsDarwin

You can download cputhrottle here: http://www.willnolan.com/cputhrottle/cputhrottle.html

 
 
     
     
-1
 
vote

Alguns outros mencionaram o aplicativo Tamer e o fato de que Apppolice é livre. Isso é ótimo, e se Apppolice atender às suas necessidades, você pode ser feliz!

Mas se você usar seu computador profissionalmente, o tempo que você perdeu em processos sugando recursos provavelmente é muito maior do que o minúsculo custo do Apptâmer.

Todas as opções que o Apptamer oferece que o Apppolice não existe por um motivo.

Apppolice requer que você configure cada processo individualmente. A única coisa que pode fazer globalmente é parar de acelerar. (O que poderia ser feito fechando de qualquer maneira.)

Apptâmer, por outro lado, pode distinguir antes do primeiro plano e aplicativos de fundo, para que você possa acelerar um aplicativo em segundo plano, mas dar-lhe potência total em primeiro plano. Navegadores, por exemplo.

apptamer

 

Some others have mentioned App Tamer and the fact that AppPolice is free. That's great, and if AppPolice meets your needs, you can be happy!

But if you use your computer professionally, the time you've lost on processes sucking down resources is probably vastly higher than the tiny cost of AppTamer.

All the options that AppTamer offers that AppPolice does not are there for a reason.

AppPolice requires you to configure each process individually. The only thing it can do globally is stop throttling. (Which could be done by closing it anyway.)

AppTamer on the other hand can distinguish before foreground and background apps, so that you can throttle an app in the background but give it full power in the foreground. Browsers, for example.

AppTamer

 
 

Perguntas relacionadas

0  OWC SSD congela regularmente  ( Owc ssd freezes regularly ) 
Eu instalei um novo SSD 115GB com uma instalação limpa do leão no meu MacBook Pro (2010) com o Data Doubler contendo meu antigo HDD Seagate. A instalação le...

3  Um ar de 1.8GHz MacBook será muito mais rápido que um modelo de 1,3 GHz?  ( Will a 1 8ghz macbook air be much faster than a 1 3ghz model ) 
Eu estou olhando para comprar um ar macbook remodelado da loja remodelada da Apple. Ao comparar os modelos, há dois eu estou olhando. A diferença entre os d...

5  Qual é a versão IOS mais rápida para o iPhone 3GS?  ( What is the fastest ios version for the iphone 3gs ) 
Eu atualizei o iPhone 3GS da minha esposa para o iOS 5.0.1 e agora tarefas básicas como abrir aplicativos como textos / discador de telefone agora são mais le...

2  16, 32, 64 GB iPhone / iPod Touch: Existem efeitos negativos de tamanho?  ( 16 32 64 gb iphone ipod touch are there any negative effects of size ) 
Estou debatendo entre comprar os 32 vs. 64 GB iPod Touch. Eu me inclinaria para um disco rígido menor se houver um efeito de tamanho na velocidade ou da bat...

0  Pobre desempenho lento após a atualização para yosemite  ( Poor sluggish performance after upgrading to yosemite ) 
Estou enfrentando desempenho muito lento no meu MacBook Pro depois que eu atualizei para Yosemite. O meu é 8GB, I7 Meados de 2012 Sistema. Normalmente, enco...

7  Como posso diagnosticar um desempenho realmente ruim do meu 13 "MBP 2011 em 10,6?  ( How can i diagnose really poor performance of my 13 mbp 2011 on 10 6 ) 
As especificações são: 2011 MBP 13 " núcleo i7 4GB RAM 320GB HDD (não SSD) Eu uso o sistema para o trabalho todos os dias, quase sempre executo o s...

3  Ajuda usa 100% de CPU depois de instalar qualquer aplicativo com documentação  ( Helpd uses 100 cpu after installing any application with documentation ) 
Eu vejo que, após a instalação de um software que é enviado com documentação no formato de documento de ajuda do OS X, o processo ABCDEFGHIJKLMNABCDEFGHIJKLM...

1  Como posso determinar por que a resposta do teclado é intermitentemente lenta com a tela grande?  ( How can i determine why keyboard response is intermittently very slow with large ) 
Estou usando um modelo de exibição Seiki 4K SE39UY04 conectado via HDMI com uma retina, 15 polegadas, início de 2013 MacBook Pro em 3840x2160 @ 30 Hz correndo...

0  É multi desktop mais recurso caro?  ( Is multi desktop more resource expensive ) 
Eu quero entender se conectar um segundo ou terceiro monitor ao meu MBP significa exatamente o sistema operacional para desenhar saída 3X e outras coisas, por...

5  Navegação na Web no Mac desacelera depois de alguns dias de uso  ( Web browsing on mac slows down after a few days of use ) 
Ao tentar procurar qualquer site, como nytimes.com, yahoo.com, etc, leva às vezes em qualquer lugar de 15s-120 para a página exibir. Por exemplo, no Chrome, q...




© 2022 pergunte.org All Rights Reserved. Casa de perguntas e respostas todos os direitos reservados


Licensed under cc by-sa 3.0 with attribution required.