Como limitar o uso da CPU para um processo e seus filhos se existe outro processo exigindo recursos ou não

3

Eu estava pensando em usar o CPUlimit para limitar o uso da CPU do processo, mas estou com o objetivo de aplicar a mesma porcentagem de uso para seus processos filhos de forma muito automática.

Existe algo que pode limitar o uso da CPU para um processo e seus filhos se existe ou não há outro processo que precise de recursos ao mesmo tempo?

cgroup cpu.shares limita apenas quando há outro processo que precisa dos recursos consumidos por um processo anterior. O que eu estou procurando é algo como sudo cpulimit -p 1234 -l 20 , então o limite no uso da cpu não considera se há outro processo ou não exigindo os recursos usados.

Isso foi aplicado ao processo pai (pid = 1234), mas não aos filhos.

    
por Ahmed Zain El Dein 29.04.2013 / 15:31

1 resposta

2

Este link pode ajudar Definir o consumo máximo de CPU em porcentagem por qualquer processo   pesquisado por: MrSeed

este script pode ajudar também, qualquer um quer entrar sugestões sobre este script para melhorá-lo, será meu prazer

       #!/bin/bash -xv

read -p "Which program u want to limit its processes?" ProgrameName
read -p "Which limitation percentage u want for it ?" limitationPercentage  
read -p "Period to be sleep " sleepInterval 
dataFile="/home/ahmedubuntu/Desktop/.file.txt"
separator="######"
trap "echo \"\" > $dataFile"  SIGINT SIGTERM SIGHUP
########################################################
if [ -e $dataFile ]; then
  echo "File $dataFile already exists!"
  echo -e "" > $dataFile
else
  echo >> $dataFile
fi 
echo -e "$ProgrameName \n $limitationPercentage \n" >> $dataFile
getAllPIDRunUnderThisProgram=$( ps -e | grep "$ProgrameName" | awk '{print ;}')
echo -e "${getAllPIDRunUnderThisProgram[@]}  \n $separator \n" >> $dataFile
for i in $getAllPIDRunUnderThisProgram
   do
    gnomeTab+=( --tab -e "cpulimit -p $i -l $limitationPercentage ")  
   done
gnome-terminal "${gnomeTab[@]}"
#echo gnome-terminal "${gnomeTab[@]}"
########################################################
while sleep $sleepInterval
do
i=0
while read line
do
if [ -n "$line" ] && ["$line" != "separator"] 
then
programeNameAndPID[i]=$line
((i++))
elif [["$line" == "separator"]] ; then
getAllPIDRunUnderThisProgram=$( ps -e | grep "$programeNameAndPID[0]" | awk '{print ;}')
if [${#getAllPIDRunUnderThisProgram[*]} -gt ${#programeNameAndPID[*]}-2  ]
then
unset gnomeTab
newProcessNumber=${#getAllPIDRunUnderThisProgram[*]}-${#programeNameAndPID[*]}-2
index=${#getAllPIDRunUnderThisProgram[*]}-1
for (( c=$newProcessNumber ; c > 0 ; c-- ))
do
gnomeTab+=( --tab -e "cpulimit -p $getAllPIDRunUnderThisProgram[$index] -l $programeNameAndPID[1] ") 
((index--)) 
done
gnome-terminal "${gnomeTab[@]}"
fi
i=0
unset programeNameAndPID
fi
done < $dataFile
done

e adicionando nice -10 funcionará bem sem necessidade de sudo e senha

    
por Ahmed Zain El Dein 30.04.2013 / 12:34