
Me gustaría limitar el uso de CPU de un proceso a, digamos, 10%.
Una forma de hacerlo es ejecutar el proceso durante 6 segundos continuos cada minuto y pausarlo el resto del tiempo.
No busco cambiar la prioridad del proceso con nice.
Respuesta1
límite de CPU(más nuevoenlace de github aquí) parece ser la herramienta para el trabajo: le permite controlar el uso del procesador de un proceso por PID, nombre del proceso o ubicación absoluta, y establecer el uso del procesador en términos de porcentaje del total.
De los documentos en la página de Sourceforge:
Ejemplos de uso
Limite el proceso 'bigloop' por nombre ejecutable al 40% de la CPU:
cpulimit --exe bigloop --limit 40
cpulimit --exe /usr/local/bin/bigloop --limit 40
Limite un proceso por PID al 55% de CPU:
cpulimit --pid 2960 --limit 55
Inicie un proceso mediante línea de comando y limítelo al 40% (¡solo en la versión de desarrollo!):
cpulimit --limit 40 /etc/rc.d/rc.boinc start
Cyberciti.biz tiene unacómoeso también indica que tal vez puedas usar
-p : Process PID.
-e : Process name.
-l : percentage of CPU allowed from 0 to 100.
-P: absolute path name of the executable program file.
En lugar de --exe y demás.
Y eso para procesadores múltiples, debe establecer el porcentaje en función de 100 * número de núcleos, por lo que un sistema dual puede permitir porcentajes de hasta 150 y un núcleo cuádruple puede permitir hasta 200.
Respuesta2
Como no especificaste tu sistema operativo, solo pondré aquí una opción para Windows y otra para Linux:
Para Linux:
UsarEstrés:
El estrés es un generador de carga de trabajo deliberadamente simple para sistemas POSIX. Impone una cantidad configurable de CPU, memoria, E/S y tensión de disco en el sistema. Está escrito en C y es software gratuito con licencia GPLv2.
A continuación se muestra un ejemplo de invocación: se impone una carga promedio de cuatro en el sistema especificando dos procesos vinculados a la CPU, un proceso vinculado a E/S y un proceso de asignación de memoria.
$ stress --cpu 2 --io 1 --vm 1 --vm-bytes 128M --timeout 10s --verbose
stress: info: [9372] dispatching hogs: 2 cpu, 1 io, 1 vm, 0 hdd
stress: dbug: [9372] (243) using backoff sleep of 12000us
stress: dbug: [9372] (262) setting timeout to 10s
stress: dbug: [9372] (285) --> hogcpu worker 9373 forked
stress: dbug: [9372] (305) --> hogio worker 9374 forked
stress: dbug: [9372] (325) --> hogvm worker 9375 forked
stress: dbug: [9372] (243) using backoff sleep of 3000us
stress: dbug: [9372] (262) setting timeout to 10s
stress: dbug: [9372] (285) --> hogcpu worker 9376 forked
stress: dbug: [9375] (466) hogvm worker malloced 134217728 bytes
stress: dbug: [9372] (382) <-- worker 9374 signalled normally
stress: dbug: [9372] (382) <-- worker 9373 signalled normally
stress: dbug: [9372] (382) <-- worker 9375 signalled normally
stress: dbug: [9372] (382) <-- worker 9376 signalled normally
stress: info: [9372] successful run completed in 10s
Para ventanas:
UsarBES – Codificador de batalla Shirase 1.4.5 / 1.5.2:
Software gratuito que controla el uso de CPU por proceso. Enfriador de CPU por software “activo”. BES es una pequeña herramienta que limita el uso de la CPU para el proceso al que "se dirige": por ejemplo, puede limitar el uso de la CPU de un proceso que usaría la CPU al 100%, hasta el 50% (o cualquier porcentaje que desee). . Con esto, puedes usar otros programas cómodamente mientras haces algo que requiere un uso intensivo de la CPU en segundo plano.
Al limitar la carga de la CPU, también puede enfriar la CPU inmediatamente cuando se calienta demasiado. Es un enfriador de CPU de software "activo". Los refrigeradores suaves convencionales ahorran energía de la CPU al hacer que la CPU entre en modo de suspensión cuando está inactiva. Esperan pasivamente hasta que la CPU quede inactiva. BES es más agresivo: enfría la CPU haciendo que el proceso de "calentamiento" se ralentice, es decir, obligando periódicamente a la CPU a estar inactiva durante un breve periodo de tiempo. (Pero deberías instalar un mejor refrigerador de hardware si necesitas usar BES con frecuencia para este propósito. En realidad, lo primero que deberías intentar es eliminar el polvo alrededor del disipador de calor (ver más abajo). El enfriamiento suave activo podría ser un truco interesante. , pero después de todo es solo una solución alternativa. Por otro lado, si su aplicación usa CPU al 100% sin sentido, ¡deje que BES haga el trabajo!)
También puedes automatizarlo usando la línea de comandos de Windows:
La siguiente línea de comando le indica a BES que observe target.exe y, cuando target.exe comience a ejecutarse, limite su uso de CPU para que target.exe solo pueda usar CPU (100 − porcentaje) % como máximo:
"C:\path\to\bes.exe" "D:\path to\target.exe" [percentage] [--minimize]
Opcionalmente, puedes utilizar un número entero entre 1 y 99 como porcentaje. Si el porcentaje se omite o no es válido, se utiliza automáticamente el último porcentaje válido conocido para target.exe (si es la primera vez que se apunta a target.exe, se aplicará la reducción predeterminada del 33 %, a menos que se especifique el porcentaje). Tenga en cuenta que, cuando se inicia desde la línea de comando, BES observará/limitará el objetivo, no solo lo limitará.
Respuesta3
Para ventanas:(Esto es solo una expansión de la respuesta de @Diogo.)
Como usuario de Windows que desea simplemente hacer clic en un único acceso directo para que el programa de destino deseado se ejecute automáticamente con el acelerador de CPU deseado, descubrí que se necesitaban un poco más de pasos relacionados con un archivo por lotes y se necesitaban algunas aclaraciones con respecto a cómo implementarlo exactamente. las partes [porcentaje] y [--minimizar] dentro de la línea de comando sugerida:
"C:\path\to\bes.exe" "D:\path to\target.exe" [percentage] [--minimize]
El método que terminé usando es el siguiente. hacer una ventanaarchivo por lotes, cree un archivo con un editor de texto y asígnele el nombre "[nombre].bat" (por ejemplo: algo.bat). Dentro del archivo, escriba lo siguiente:
@echo off
start "" "C:\path\to\bes.exe" "D:\path to\target.exe" 90 -m
start "" "D:\path to\target.exe"
dónde:
- start "", permite tanto elBESy programa de destino para ejecutaral mismo tiempo.
- "C:\path\to\bes.exe" es la ruta exacta al programa BES entre comillas,
- "D:\ruta a\target.exe" es la ruta exacta al programa con el que desea acelerar la CPU. dentro de las comillas,
- 90es un porcentaje de reducción, en este caso significa reducir el límite de CPU a 100-90= 10%
- -m es iniciar el programa BES minimizado (según las instrucciones de BES: "La opción --minimize, o -m para abreviar, le indica a BES que comience como minimizado (enviado a la bandeja del sistema)."
Luego, al hacer doble clic en el archivo .bat resultante, se ejecutará el programa de destino y se acelerará automáticamente al nivel de CPU deseado con BES.