Here's a somewhat imperfect, though short script I knocked together that fixes
scheduling issues.
while true
do
for i in `iotop -P -b -q -o -d 0.1 -n 10 | awk -F ' ' '{if ( $1 ~ /[0-9]/ &&
$10 > 10) print $1}'`
do
ionice -c 3 -p $i
echo "process $i reniced to idel as it was hogging io"
done
for i in `top -b -d 0.1 -n 10 | awk -F ' ' '{if ( $1 ~ /[0-9]/ && $4 == 0 &&
$9 > 15) print $1}'`
do
renice -n 10 -p $i
echo "process $i reniced to idel as it was hogging cpu"
done
for i in `top -b -d 0.1 -n 10 | awk -F ' ' '{if ( $1 ~ /[0-9]/ && $4 == 10 &&
$9 < 10) print $1}'`
do
renice -n 0 -p $i
echo "process $i reniced to idel as it stopped hogging cpu"
done
sleep 0.5
done