84 votos

¿Puedo limitar manualmente el %CPU utilizado por un proceso?

Me gustaría limitar el tiempo de CPU dedicado a ciertos procesos (por ejemplo, Firefox, Safari, ...).

No puedo entender por qué este tipo de programas, incluso cuando no se utilizan (no se carga nada, no hay animaciones, se ejecuta en segundo plano, ...), están tan hambrientos de recursos. ¿Por qué un navegador tiene que comerse el 50% o más de mi CPU? ¿Puedo limitarlo al 10%?

0 votos

Apenas consigo que Safari utilice el 10% de mi CPU con unos 20 Windows abiertos, así que te sugiero que intentes averiguar por qué la aplicación está utilizando esos recursos y solucionarlo, en lugar de limitarse a limitar los recursos que puede utilizar.

1 votos

@benwiggy - Luky tú. El hecho es que una aplicación puede comportarse como quiera, por ejemplo, puede pretender utilizar todos los recursos disponibles en el sistema, ya sea a propósito o por un error. Es el sistema operativo el que debe limitar cada aplicación para que todos los procesos tengan su cuota de tiempo de CPU. Y el usuario debe poder hacer saber al sistema operativo qué procesos tienen prioridad bajo su punto de vista. También hay que tener en cuenta que muchos ordenadores funcionan con baterías... por lo que el consumo de energía es otro factor a tener en cuenta.

48voto

Gaurav Puntos 365

cputhrottle es la herramienta que necesitas. Puede instalarla con Homebrew .

Puedes monitorizar una serie de procesos por su nombre ejecutando el Bash scriptde abajo. No estoy muy seguro de cómo convertir esto en un elemento de inicio de sesión ya que cputhrottle requiere permisos de superusuario. Ejecútelo como un script, en un flujo de trabajo de Automator, lo que sea:

# 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]

He añadido una versión diferente para este script (a bash script), que podría ser útil para las personas que buscan limitar la CPU para múltiples aplicaciones.

Este nuevo script también permite especificar una lista que contenga el nombre de la aplicación y el límite de CPU para la misma.

La principal diferencia es que puedes añadir un límite de cpu por aplicación, y se ejecutará sólo una vez por aplicación. También he añadido la opción de matar a todos cputhrottle procesos.

El script asume que ambos cputhrottle y pidof están instalados antes de ejecutarlo.

#!/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."

Fuente:

16 votos

Como se ha señalado en otro comentario , cputhrottle 's forumula fue eliminado de Homebrew el 17 de febrero de 2019 porque ya no funciona . Yosemite fue la última versión de MacOS que soportó cputhrottle .

0 votos

@Casimir y ahora, ¿qué hacer?

0 votos

@PeterSamokhin Lo siento, no conozco ninguna alternativa. Pero tampoco he buscado recientemente.

18voto

Regent Puntos 111

Sí que se puede. Hay CPUThrottle que permite especificar un PID a restringir.

Ten en cuenta que intentan usar esa cantidad por una razón, es una herramienta útil pero si te va a mejorar o empeorar en el día a día será algo que descubras.

2 votos

Interesante. Pero con esta utilidad tengo que lanzar un programa, encontrar su(s) PID(s) y utilizar manualmente cputhrottle. Cada vez que lo lanzo. ¿Hay algo que me permita decirle al sistema: "A partir de hoy ejecute siempre este programa con un máximo de 25% de CPU" ?

0 votos

Que yo sepa no, sólo he conocido el CPUThrottle.

2 votos

404 Archivo no encontrado

17voto

Dave Puntos 31

No es exactamente lo que quería, pero, en lo que respecta a Google Drive y Chrome esto lo que hizo el truco para mí:

Google Drive ("Copia de seguridad y sincronización")

  • desproveer de prioridad:

    for f in $(pgrep 'Backup and Sync'; pgrep 'FinderSyncAPIExtension'); do renice +20 -p $f; done
  • volver a la normalidad:

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

Cromo

  • Desproveer de prioridad a todos los procesos actuales:

    for f in $(pgrep 'Chrome'); do renice +20 -p $f; done
  • devolver a la normalidad todos los procesos actuales:

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

2 votos

+1 - Esta es la respuesta más correcta ofrecida porque 'nice' es parte del sistema operativo y se vincula directamente con el algoritmo utilizado por el programador del kernel para decidir qué proceso obtiene la siguiente porción de tiempo de CPU. Se siempre funciona en cualquier sistema Unix o Linux y no depende de ningún complemento de terceros. La ventaja es que esos procesos pueden usar más CPU si no están compitiendo por el tiempo de la CPU con otros procesos.

13voto

user36155 Puntos 36

Aunque no es una respuesta directa a la pregunta del OP, si tienes un problema con un proceso en particular que ocupa demasiado tiempo de tu CPU, y hace que tu ordenador sea inutilizable, y no te importa el tiempo que tarda ese proceso en terminar la tarea en la que está trabajando, puedes usar la función renice para alterar la prioridad de ese proceso, haciendo que se comporte bien (de ahí el nombre).

En primer lugar, tienes que encontrar el PID del proceso que está utilizando los recursos de la CPU. Puedes hacerlo en el Monitor de Actividad, o en Terminal.app con el botón ps por ejemplo, para encontrar el PID del navegador Safari, escriba

MacBook:~

0 votos

¿Hay alguna forma de ver la prioridad actual de un proceso?

0 votos

utilice top o htop para ver el valor actual de nice de un proceso. (brew install htop), (sudo apt install htop). Verás una de las columnas que contiene el valor.

9voto

Flimzy Puntos 1490

El enlace que publicó Nicholas Smith ya no funciona. Así que encontré otra aplicación que hace el truco para las personas que están buscando de nuevo. la aplicación llama Apppolice.

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

3 votos

Al igual que AppPolice, existe AppTamer ( stclairsw.com/AppTamer ). Una palabra de advertencia: en el momento de escribir este comentario, AppTamer aún no es compatible con OSX Sierra.

1 votos

Oh, qué hallazgo. Acabo de instalar AppTamer. Me complace informar que funciona fantásticamente bien. Lo utilizo para mantener el nuevo StarCraft remasterizado en línea cuando salgo con la tecla Alt. Ah, y me olvidé de mencionar que estoy ejecutando MacOS Sierra 10.12.6. Gracias por la sugerencia.

0 votos

Apppolice ha dejado de funcionar.

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X