Mozno hodne z vas cpulimit zna, doufam ze dalsim tenhle navod pomuze tak jako mne. Pouzivanim cpulimit-u jako demona se mi podarilo zabranit nadmernemu prehrivani pri screensaveru
http://forum.ubuntu.cz/index.php/topic,38588.0.html , rhythmbox pri obycejnem hrani radia prestal vyskakovat az na 60% spotreby CPU a podobne.
INSTALACEpro absolutni zacatek potrebujeme nasledovne:
sudo apt-get install cpulimit
Demon ktereho vytvorime potrebuje take balik gawk takze ho instalujeme take:
sudo apt-get install gawk
VYTVORENI DEMONA #!/bin/bash
# ==============================================================
# CPU limit daemon - set PID's max. percentage CPU consumptions
# ==============================================================
# Variables
CPU_LIMIT=20 # Maximum percentage CPU consumption by each PID
DAEMON_INTERVAL=3 # Daemon check interval in seconds
BLACK_PROCESSES_LIST= # Limit only processes defined in this variable. If variable is empty (default) all violating processes are limited.
WHITE_PROCESSES_LIST= # Limit all processes except processes defined in this variable. If variable is empty (default) all violating processes are limited.
# Check if one of the variables BLACK_PROCESSES_LIST or WHITE_PROCESSES_LIST is defined.
if [[ -n "$BLACK_PROCESSES_LIST" && -n "$WHITE_PROCESSES_LIST" ]] ; then # If both variables are defined then error is produced.
echo "At least one or both of the variables BLACK_PROCESSES_LIST or WHITE_PROCESSES_LIST must be empty."
exit 1
elif [[ -n "$BLACK_PROCESSES_LIST" ]] ; then # If this variable is non-empty then set NEW_PIDS_COMMAND variable to bellow command
NEW_PIDS_COMMAND="top -b -n1 -c | grep '$BLACK_PROCESSES_LIST' | gawk '\$9>CPU_LIMIT {print \$1}' CPU_LIMIT=$CPU_LIMIT"
elif [[ -n "$WHITE_PROCESSES_LIST" ]] ; then # If this variable is non-empty then set NEW_PIDS_COMMAND variable to bellow command
NEW_PIDS_COMMAND="top -b -n1 -c | gawk 'NR>6' | grep -v '$WHITE_PROCESSES_LIST' | gawk '\$9>CPU_LIMIT {print \$1}' CPU_LIMIT=$CPU_LIMIT"
else
NEW_PIDS_COMMAND="top -b -n1 -c | gawk 'NR>6 && \$9>CPU_LIMIT {print \$1}' CPU_LIMIT=$CPU_LIMIT"
fi
# Search and limit violating PIDs
while sleep $DAEMON_INTERVAL
do
NEW_PIDS=$(eval "$NEW_PIDS_COMMAND") # Violating PIDs
LIMITED_PIDS=$(ps -eo args | gawk '$1=="cpulimit" {print $3}') # Already limited PIDs
QUEUE_PIDS=$(comm -23 <(echo "$NEW_PIDS" | sort -u) <(echo "$LIMITED_PIDS" | sort -u) | grep -v '^$') # PIDs in queue
for i in $QUEUE_PIDS
do
cpulimit -p $i -l $CPU_LIMIT -z & # Limit new violating processes
done
done
Skript si ulozime jako: cpulimit_daemon.sh
Ted si vysvetlime par dulezitych veci ohledne demona (pro anglicky nemluvicich). Na zacatku scriptu pod #Variables mame 4 variables (promenne).
CPU_LIMIT -> nastaveni maximalniho limitu pro jednotlivy proces v procentech
DAEMON_INTERVAL -> interval v sekundach aby demon udelal kontrolu vytizeni a upravil ji
BLACK_PROCESSES_LIST -> sem muzeme dat procesy ktere chceme limitovat, pokud tuto prmennou ponechame prazdnou (jak je to ve skritpu) vsechny procesy prekracujici limit budou upravovany
WHITE_PROCESSES_LIST -> pravy opak pro BLACK_PROCESSES_LIST, pokud sem zapiseme jakykoliv proces, danej proces nebude limitovan, jestli promennou nechame prazdnou znova vsechny procesy prekracujici limit budou demonem upravovany
Dulezite: jednu anebo obe z promennych BLACK_PROCESSES_LIST anebo WHITE_PROCESSES_LIST vzdy nechavejte prazdnouDo promennych BLACK_PROCESSES_LIST anebo WHITE_PROCESSES_LIST muzete samozrejme zapisovat vice procesu za pouziti nasledujicich charakteru: \|
Priklad (nasledujici procesy nebudou nikdy limitovany): WHITE_PROCESSES_LIST="mysql\|firefox\|gedit"
NASTAVENI DEMONA, PRAVA A ZPOUSTENI PRI STARTUnas skript cpulimit_daemon.sh si ted premistnime do adresare root (najdeme ho pod systemem)
po premistneni nastavime prava:
sudo chmod 700 /root/cpulimit_daemon.sh
ted si vytvorime par funkci k ovladani naseho demona:
sudo gedit /etc/init.d/cpulimit
do otevreneho editoru pak nasledne vlozime tohle:
#!/bin/sh
#
# Script to start CPU limit daemon
#
set -e
. /lib/lsb/init-functions
case "$1" in
start)
nohup /root/cpulimit_daemon.sh &
;;
stop)
ps -eo pid,args | gawk '$3=="/root/cpulimit_daemon.sh" {print $1}' | xargs kill -9 # kill cpulimit daemon
ps -eo pid,args | gawk '$2=="cpulimit" {print $1}' | xargs kill -9 # release cpulimited process to normal priority
;;
restart)
$0 stop
sleep 5
$0 start
;;
status)
ps -eo pid,args | gawk '$3=="/root/cpulimit_daemon.sh" {print}' | wc -l | gawk '{ if ($1 == 1) print " * cpulimit daemon is running"; else print " * cpulimit daemon is not running" }'
;;
esac
exit 0
a ulozime ho (SAVE)
dalsim krokem je zmena majitele souboru, pridelime ho root-u
cd /etc/init.d/
sudo chown root:root cpulimit
nastavime prava
sudo chmod 755 cpulimit
a pridame ho aby se zpoustel pri startu:
sudo update-rc.d cpulimit defaults
provedeme restart
sudo reboot
KONTROLA STAVU, MANUALNI ZPUSTENI, VYPNUTI a RESTARTOVANI DEMONAkontrola po restartu
sudo service cpulimit status
dve mozne odezvy: "cpulimit daemon is running" anebo "cpulimit daemon is not running".
zastaveni demona:
sudo service cpulimit stop
zpusteni demona
sudo service cpulimit start
pokud provadime nejaky zmeny v skriptu /root/cpulimit_daemon.sh napriklad zmena limitu a pod. tak je potreba restartu demona
sudo service cpulimit restart
1,2,4 -JADRO-ve PROCESORYCely vyse uvedeny postup je pro jednojadrovy processor. Pokud vas processor ma vice jader hodnotu CPU_LIMIT musite nasobit, nakolik se jedna o multiprocessing
http://en.wikipedia.org/wiki/Symmetric_multiprocessingTakze pri procesoru napriklad Intel Core-Duo hodnota CPU_LIMIT bude 40
ODSTRANENI, ODINSTALACE DEMONA A CPULIMIT PROGRAMUzastavime demona
sudo service cpulimit stop
vymazeme demona ze startovni procedury
sudo update-rc.d -f cpulimit remove # Remove symbolic links
sudo rm /etc/init.d/cpulimit # Delete cpulimit boot-up script
sudo rm /root/cpulimit_daemon.sh # Delete cpulimit daemon script
odinstalujeme cpulimit
sudo apt-get cpulimit remove
DOMOVSKA STRANKA CPULIMIT PROGRAMUhttp://cpulimit.sourceforge.net/Navod prevzanej z
http://ubuntuforums.org/showthread.php?t=992706 a potvrzena plna funkcnost pro Ubuntu 9.04