oliverthered

zipio.sh

Nov 2nd, 2020
147
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Bash 2.98 KB | None | 0 0
  1. #!/bin/bash
  2. loadthreashold=1.0
  3. ioprocthreshold=40.0
  4. ioprocthreset=05.00
  5. cpuprocthreashold=20.0
  6. cpuprocreset=05.0
  7. reniceto=10
  8.  
  9. declare -A ionicedprocesses
  10. declare -A renicedprocesses
  11.  
  12.  
  13.  
  14. float_cp () {
  15.     #IFS=" "
  16.     float1=( ${1/./ } )
  17.     float2=( ${2/./ } )
  18.     while [[ ${#float2[1]} -lt ${#float1[1]} ]]
  19.     do
  20.         float2[1]+="0"
  21.     done
  22.     while [[ ${#float2[1]} -gt ${#float1[1]} ]]
  23.     do
  24.         float1[1]+="0"
  25.     done
  26.     if [[ ${float1[0]} -gt ${float2[0]} || (${float1[0]} -eq ${float2[0]} && ${float1[1]} -gt ${float2[1]}) ]]; then
  27.         fcp=1
  28.     elif [[ ${float1[0]} -eq ${float2[0]} && ${float1[1]} -eq ${float2[1]} ]]; then
  29.         fcp=0
  30.     else
  31.         fcp=-1
  32.     fi
  33. }
  34.  
  35. while true
  36. do
  37.     readarray -d ' ' -t i < /proc/loadavg
  38.     echo ${i[2]}
  39.     float_cp ${i[2]} $loadthreasholdv
  40.     if [[ $fcp -gt 0 ]]
  41.     then
  42.         echo "Load exceeds threshold of $loadthreashold"
  43.         readarray -d $'\n' -t i <<< $(./iotop -P -b -q -o -n 2 -d 0.1)
  44.         for j in  "${i[@]}"
  45.         do
  46.             IFS=$' ' GLOBIGNORE='*' command eval 'k=($j)'
  47.             if [[ ${k[0]:0:1} = [0-9] ]]
  48.             then
  49.                 float_cp ${k[9]} $ioprocthreshold
  50.                 if [[ $fcp -gt 0 && ${k[1]} = "be/"[0-9] ]] #was be/0 so I need to look at be states
  51.                 then
  52.                     ionice -c 3 -t -p ${k[0]}
  53.                     ionicedprocesses[${k[0]}]=${k[0]}
  54.                     echo "process ${k[0]} \"${k[9]}\" reniced to idle as it was hogging io"
  55.                 fi
  56.             else
  57.                 float_cp ${k[9]} $ioprocthreshold
  58.                 if [[  $fcp -lt 0 && ${ionicedprocesses[${k[0]}]} = ${k[0]} ]]
  59.                 then
  60.                     ionice -c 2 -n 4 -t -p ${k[0]}
  61.                     echo "process ${k[0]} \"${k[9]}\" reniced to be/4 as it stopped hogging io"
  62.                     unset ionicedprocesses[${k[0]}]
  63.                 fi
  64.             fi
  65.         done
  66.         readarray -d $'\n' -t i <<< $(top -b -d 0.1 -n 1)
  67.         for j in  "${i[@]}"
  68.         do
  69.             k=( ${j/ / } )
  70.             if [[ ${k[0]:0:1} = [0-9] ]]
  71.             then
  72.                 float_cp ${k[8]} $cpuprocthreashold
  73.                 fcp=0
  74.                 if [[ $fcp -gt 0 && ${k[3]} = "0" ]] #was be/0 so I need to look at be states
  75.                 then
  76.                     renice -n $reniceto -p ${k[0]}
  77.                     echo "process ${k[0]} \"${k[8]}\"reniced to $reniceto as it was hogging cpu"
  78.                     renicedprocesses[${k[0]}]=${k[0]}
  79.                 else
  80.                     float_cp ${k[8]} $cpuprocthreashold
  81.                     if [[ $fcp -lt 0 && ${renicedprocesses[${k[0]}]} = ${k[0]} ]]
  82.                     then
  83.                         renice -n 0 -p ${k[0]}
  84.                         echo "process ${k[0]} reniced to 0 as it stopped hogging cpu"
  85.                        unset renicedprocesses[${k[0]}]
  86.                     fi
  87.                 fi
  88.             fi
  89.         done
  90.     fi
  91.     sleep 2
  92. done
Advertisement
Add Comment
Please, Sign In to add comment