我正在使用12核24线程Linux机器来执行以下任务。每项任务都是独立的。
while read parameter
do
./program_a $parameter $parameter.log 2>&1 &
done < parameter_file
但是这段代码会一次性调度所有任务,这可能会导致严重的上下文切换缺少空闲的CPU功率和/或内存不足。
我想利用系统信息工具,例如免费,顶部和 ps 来确定是否应该调度任务。
使用免费。
while read parameter
do
#for instance using free
free_mem=`free -g | grep Mem | awk '{print $4}'`
if [ $free_mem -gt 10]; then
./program_a $parameter $parameter.log 2>&1 &
fi
done < parameter_file
但这不起作用,因为这不会等到条件达到标准。我该怎么做?
此外,我应该如何使用顶部和 ps 来确定系统是否正忙。我想在系统太忙时发送新任务。
也许我可以使用
ps aux | grep "program_a " | grep -v "grep" | wc -l
限制调度任务的数量。但这是确定系统是否繁忙的隐含方式。还有其他想法吗?
答案 0 :(得分:1)
while read parameter
do
#for instance using free
while 1; do
free_mem=`free -g | awk '/Mem/{print $4}'`
if (( $free_mem > 10 )); then
break
fi
sleep 1 # wait so that some tasks might finish
done
./program_a $parameter $parameter.log 2>&1 &
done < parameter_file