Какой хороший способ опроса нагрузки системы и запуска задания только при наличии достаточного количества свободных циклов? - PullRequest
0 голосов
/ 26 июня 2019

Я использую Perl для запуска нескольких десятков аналитических работ.Я забыл, что загрузка системы будет подсчитывать прерываемые задачи сна, поэтому я пытался загрузить работу Perl с каждой из моих задач анализа и затем спать, если нагрузка системы была слишком высокой (> 5).

Один разЯ понял, что мои задания сна обслуживались должным образом, но, внося свой вклад в среднюю нагрузку на систему, я попытался воспользоваться использованием idle%, получаемого из mpstat.Мне это пока не нравится.

sub VerifyResources {
  my ($MEM,$CPU,$HDF,$HOME,$SLEEP) = @_;
  my $FreeMem=`cat /proc/meminfo |grep MemAvailable|awk '{print \$2}'`;
  $FreeMem=~ s/[\r\n]+//;
  print("Verify Resources performed memory check. ->$FreeMem<-.\n");
  #$CPULoad=`cat /proc/loadavg |awk '{print \$1}'`;
  $CPUIdle=`/usr/bin/mpstat |tail -1|awk '{print \$13}'`;
  $CPUIdle=~ s/[\r\n]+//;
  $CPULoad=(100-$CPUIdle)*8/100; #Multiply idle % by number of cores, divide by 100
  print("Verify Resources performed CPU load check. ==>$CPULoad<==.\n");
  $HDFFree=`df -m /mnt/hdf|tail -1 |awk '{print \$4}'`;
  $HDFFree=~ s/[\r\n]+//;
  print("Verify Resources performed /mnt/hdf space check. [$HDFFree] MB.\n");
  $HOMEFree=`df -m /home/USER |tail -1 |awk '{print \$4}'`;
  $HOMEFree=~ s/[\r\n]+//;
  print("Verify Resources performed /home/tarl space check. [$HOMEFree] MB.\n");
  while($FreeMem < $MEM || $CPULoad > $CPU || $HDFFree < $HDF || $HOMEFree < $HOME) {
    if($FreeMem < $MEM) {
      print("Free memory of -->$FreeMem<-- below $MEM. Sleeping for $SLEEP seconds.\n");
    }
    if($CPULoad > $CPU ) {
      print("CPU Load of $CPULoad is above $CPU. Sleeping for $SLEEP seconds.\n");
    }
    if($HDFFree < $HDF) {
      print("HDF available space of $HDFFree is below $HDF. Sleeping for $SLEEP seconds.\n");
    }
    if($HOMEFree < $HOME) {
      print("/home/USER available space of $HOMEFree is below $HOME. Sleeping for $SLEEP seconds.\n");
    }
    sleep($SLEEP);
    $FreeMem=`cat /proc/meminfo|grep MemAvailable|awk '{print \$2}'`;
    $FreeMem=~ s/[\r\n]+//;
    #$CPULoad=`cat /proc/loadavg |awk '{print \$1}'`;
    #$CPULoad=~ s/[\r\n]+//;
    $CPUIdle=`/usr/bin/mpstat |tail -1|awk '{print \$13}'`;
    $CPUIdle=~ s/[\r\n]+//;
    $CPULoad=(100-$CPUIdle)*8/100; #Multiply idle % by number of cores, divide by 100
    $HDFFree=`df -m /mnt/hdf|tail -1 |awk '{print \$4}'`;
    $HDFFree=~ s/\r\n]+//;
    $HOMEFree=`df -m /home/USER|tail -1 |awk '{print \$4}'`;
    $HOMEFree=~ s/\r\n]+//;
  }
  print("Verify Resources Passed.\n");
}

Какой хороший способ опросить систему и перейти к следующему шагу только при наличии достаточного запасного процессора?Есть ли эквивалент сна, который не влияет на нагрузку на систему?Или лучший способ измерить Системную Нагрузку, которая не учитывает сон?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...