Come impostare permanentemente il limite della CPU per il dato processo. Cpulimit e bello non funzionano

Ci sono molte domande simili ma nessuna di queste mi aiuta con il mio problema.

Ho Ubuntu 11.10 sul server (è la versione desktop). Ho un sito web in esecuzione su di esso. C’è un processo che è molto importante, ma non deve essere eseguito in alta priorità. Voglio limitare permanentemente l’utilizzo della CPU per il processo , non per l’utente. Questo processo è eseguito dalla funzione exec (è la funzione php, non il processo di sistema).

Quindi vedo 2 opzioni: 1. Aggiungi qualche tipo di limite ogni volta che viene eseguita la funzione. 2. Limitare l’utilizzo della CPU in modo permanente per questo processo.

Ho provato ad usare “nice” e cpulimit, ma niente sembra funzionare. Bello non ha alcun effetto e cpulimit (con -e) dice: “nessun processo di destinazione trovato”.

Sono piuttosto un principiante, quindi per favore presumo di non sapere quasi nulla.

In assenza di dettagli richiesti …

Ecco come uso cgroup su ubuntu.

In questo post, dovrai modificare la variabile “$ USER” all’utente che sta eseguendo il processo

Ho aggiunto le informazioni per la memoria e quella sarà una FAQ, se non ne hai bisogno non usarla.

1) Installa cgroup-bin

 sudo apt-get install cgroup-bin 

2) Riavvia. cgroups ora si trova in /sys/fs/cgroup

3) Crea un cgroup per il tuo utente (il proprietario del processo)

 # Change $USER to the system user running your process. sudo cgcreate -a $USER -g memory,cpu:$USER 

4) Il tuo utente può loro gestire le risorse. Di default gli utenti ottengono 1024 unità di cpu (condivisioni), quindi per limitare a circa il 10% di cpu, la memoria è in byte …

 # About 10 % cpu echo 100 > /cgroup/cpu/$USER/cpu.shares # 10 Mb echo 10000000 > /cgroup/memory/$USER/memory.limit_in_bytes 

5) Avvia il tuo processo (cambia exec in cgexec)

 # -g specifies the control group to run the process in # Limit cpu cgexec -g cpu:$USER command  & # Limit cpu and memory cgexec -g memory,cpu:$USER command  & 

Configurazione

Supponendo che cgroups stia lavorando per te;)

Modifica /etc/cgconfig.conf , aggiungi il tuo cgroup personalizzato

 # Graphical gksudo gedit /etc/cgconfig.conf # Command line sudo -e /etc/cgconfig.conf 

Aggiungi nel tuo cgroup. Cambiare nuovamente $ USER con il nome utente proprietario del processo.

 group $USER { # Specify which users can admin (set limits) the group perm { admin { uid = $USER; } # Specify which users can add tasks to this group task { uid = $USER; } } # Set the cpu and memory limits for this group cpu { cpu.shares = 100; } memory { memory.limit_in_bytes = 10000000; } } 

Puoi anche specificare gruppi gid=$GROUP , /etc/cgconfig.conf è ben commentato.

Ora esegui nuovamente il tuo processo con cgexec -g cpu:$USER command

Puoi vedere il tuo processo (tramite PID) in /sys/fs/cgroup/cpu/$USER/tasks

Esempio

bodhi @ ufbt: ~ $ cgexec -g cpu: bodhi sleep 100 &

[1] 1499

bodhi @ ufbt: ~ $ cat / sys / fs / cgroup / cpu / bodhi / tasks

1499

Per ulteriori informazioni consultare: http://docs.redhat.com/docs/en-US/Red_Hat_Enterprise_Linux/6/html/Resource_Management_Guide/