Я использую 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");
}
Какой хороший способ опросить систему и перейти к следующему шагу только при наличии достаточного запасного процессора?Есть ли эквивалент сна, который не влияет на нагрузку на систему?Или лучший способ измерить Системную Нагрузку, которая не учитывает сон?