Почему это не работает, когда среднее число загрузки превышает 1?

Можно включить отладку IO через echo 1 > /proc/sys/vm/block_dump и затем смотрите сообщения отладки в/var/log/syslog. Это имеет преимущество получения некоторого типа файла журнала с прошлыми операциями тогда как iotop только показывает текущее действие.

1
01.10.2013, 05:02
2 ответа

Благодаря @Gilles я наконец видел то, что пошло не так, как надо!

В строке, load=$CPU_LOAD_TIME мое намерение состояло в том, чтобы извлечь любой из $1, $2 или $3 в зависимости от значения CPU_LOAD_TIME (который был бы 1,2 (или 5) или 3 (или 15)), набор через параметры командной строки.

Это, конечно, не происходил. При тестировании первоначально, я только проверял на высокие загрузки главным образом более чем 2,00 средних числа загрузки, таким образом, я не определил это, поскольку сценарий вел себя, как предназначено (генерирующий уведомления).

Я внес два изменения, и теперь сценарий инициировал в правильных значениях (Протестированный и при увеличении и при уменьшении загрузок, только для проверки). Это - основное изменение:

   case $CPU_LOAD_TIME in
      15)load=$3;;
      5) load=$2;;
      *) load=$1;;
   esac
0
28.01.2020, 02:03
  • 1
    @slm, Файлы журнала создаются с теми же полномочиями как в Вашем случае для меня, но UserLogs и Народ rw------- ---------121 предложение--------128301----: можно использовать массивы удара для предотвращения set материал: loads=($(cat /proc/loadavg )); echo "5=${loads[0]}; 10=${loads[1]}; 15=${loads[2]}"; можно использовать переменную для индекса: ${loads[$i]}. Отметьте количество массивов от 0, не 1. Вы могли также использовать read: read -a loads < /proc/loadavg; echo "5=${loads[0]}; 10=${loads[1]}; 15=${loads[2]}" –  derobert 02.10.2013, 07:51

Эта версия, которую я изменил немного, кажется, хорошо работает. Я назвал его load.bash.

#!/bin/bash

CPU_LOAD_TIME=$1
CPU_LOAD_LMT=$2

list=$(cat /proc/loadavg)
set -- $list

load=$CPU_LOAD_TIME #Extract required cpu load
load=$(echo "scale=2; $load * 100" | bc) #Convert to integer
load=$(printf "%.0f" $load) #Remove decimal digits

highload=$((`nproc`*$CPU_LOAD_LMT)) #Calculate high load threshold 
                                    #based on number of cores

printf "LOAD: %s | HLOAD: %s\n" $load $highload
if test $load -ge $highload
then
  echo "ge"
else
  echo "le"
fi

Выполнения в качестве примера

$ ./load.bash 10 100
LOAD: 1000 | HLOAD: 400
ge

$ ./load.bash 1 1000
LOAD: 100 | HLOAD: 4000
le
0
28.01.2020, 02:03

Теги

Похожие вопросы