Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/bin/bash
- loadthreashold=1.0
- ioprocthreshold=40.0
- ioprocthreset=05.00
- cpuprocthreashold=20.0
- cpuprocreset=05.0
- reniceto=10
- declare -A ionicedprocesses
- declare -A renicedprocesses
- float_cp () {
- #IFS=" "
- float1=( ${1/./ } )
- float2=( ${2/./ } )
- while [[ ${#float2[1]} -lt ${#float1[1]} ]]
- do
- float2[1]+="0"
- done
- while [[ ${#float2[1]} -gt ${#float1[1]} ]]
- do
- float1[1]+="0"
- done
- if [[ ${float1[0]} -gt ${float2[0]} || (${float1[0]} -eq ${float2[0]} && ${float1[1]} -gt ${float2[1]}) ]]; then
- fcp=1
- elif [[ ${float1[0]} -eq ${float2[0]} && ${float1[1]} -eq ${float2[1]} ]]; then
- fcp=0
- else
- fcp=-1
- fi
- }
- while true
- do
- readarray -d ' ' -t i < /proc/loadavg
- echo ${i[2]}
- float_cp ${i[2]} $loadthreasholdv
- if [[ $fcp -gt 0 ]]
- then
- echo "Load exceeds threshold of $loadthreashold"
- readarray -d $'\n' -t i <<< $(./iotop -P -b -q -o -n 2 -d 0.1)
- for j in "${i[@]}"
- do
- IFS=$' ' GLOBIGNORE='*' command eval 'k=($j)'
- if [[ ${k[0]:0:1} = [0-9] ]]
- then
- float_cp ${k[9]} $ioprocthreshold
- if [[ $fcp -gt 0 && ${k[1]} = "be/"[0-9] ]] #was be/0 so I need to look at be states
- then
- ionice -c 3 -t -p ${k[0]}
- ionicedprocesses[${k[0]}]=${k[0]}
- echo "process ${k[0]} \"${k[9]}\" reniced to idle as it was hogging io"
- fi
- else
- float_cp ${k[9]} $ioprocthreshold
- if [[ $fcp -lt 0 && ${ionicedprocesses[${k[0]}]} = ${k[0]} ]]
- then
- ionice -c 2 -n 4 -t -p ${k[0]}
- echo "process ${k[0]} \"${k[9]}\" reniced to be/4 as it stopped hogging io"
- unset ionicedprocesses[${k[0]}]
- fi
- fi
- done
- readarray -d $'\n' -t i <<< $(top -b -d 0.1 -n 1)
- for j in "${i[@]}"
- do
- k=( ${j/ / } )
- if [[ ${k[0]:0:1} = [0-9] ]]
- then
- float_cp ${k[8]} $cpuprocthreashold
- fcp=0
- if [[ $fcp -gt 0 && ${k[3]} = "0" ]] #was be/0 so I need to look at be states
- then
- renice -n $reniceto -p ${k[0]}
- echo "process ${k[0]} \"${k[8]}\"reniced to $reniceto as it was hogging cpu"
- renicedprocesses[${k[0]}]=${k[0]}
- else
- float_cp ${k[8]} $cpuprocthreashold
- if [[ $fcp -lt 0 && ${renicedprocesses[${k[0]}]} = ${k[0]} ]]
- then
- renice -n 0 -p ${k[0]}
- echo "process ${k[0]} reniced to 0 as it stopped hogging cpu"
- unset renicedprocesses[${k[0]}]
- fi
- fi
- fi
- done
- fi
- sleep 2
- done
Advertisement
Add Comment
Please, Sign In to add comment