1

我们正在编写一个脚本,该脚本将告诉我们 8 组计算机上有多少线程可用。我知道我可以使用

cat /proc/cpuinfo | grep processor | wc -l

获取线程总数,但我们想知道可用线程的数量。可用线程是指当前未使用的线程数。我们有多个人访问这些计算机并运行一次需要 1-12 个线程的作业,如果能够快速查询而不是手动访问每台计算机会很好

访问计算机应该可以用这个脚本完成,我只需要找到一个合适的函数来用作 FindAvaiableThreads()

ssh user@host <<'ENDSSH'
#commands to run on remote host
FindAvaiableThreads()
ENDSSH

ssh user@host2 << 'ENDSSH'
#commands to run on remote host
FindAvaiableThreads()
ENDSSH

...

ssh user@hostN << 'ENDSSH'
#commands to run on remote host
FindAvaiableThreads()
ENDSSH

最终结果

我们正在运行 checker.scr,它向远程计算机 n 发送一个脚本,该脚本通过查看 cpu 使用情况并从 cpu 总量中减去来估计可用 cpu 的数量,并根据需要针对超线程进行纠正。

我还想指出,此实现基于使用公共/私有 ssh 密钥来延迟密码输入,但是 sshpass 可用于将您的密码传递给它;但是,我不允许在这些计算机上安装此类程序。

检查器.scr

name = username

ssh $name@remote1 'bash -s' < threadquery.scr
ssh $name@remote2 'bash -s' < threadquery.scr
ssh $name@remote3 'bash -s' < threadquery.scr
ssh $name@remote4 'bash -s' < threadquery.scr
ssh $name@remote5 'bash -s' < threadquery.scr
ssh $name@remote6 'bash -s' < threadquery_hyper.scr
ssh $name@remote7 'bash -s' < threadquery_hyper.scr
ssh $name@remote8 'bash -s' < threadquery_hyper.scr

线程查询.scr

NUMCPUS=`grep ^proc /proc/cpuinfo | wc -l`;
FIRST=`cat /proc/stat | awk '/^cpu / {print $5}'`;
sleep 1;
SECOND=`cat /proc/stat | awk '/^cpu / {print $5}'`;
USED=`echo 2 k 100 $SECOND $FIRST - $NUMCPUS / - p | dc`;
AVA=$(echo "$NUMCPUS-$NUMCPUS*$USED/100" | bc -l);
HOSTVAL=$(hostname)
echo "Estimated avaliable processors on $HOSTVAL";
echo $AVA | awk -F\. '{if(($2/10^length($2)) >= .5) printf("%d\n",$1+1);else printf("%d\n",$1)}';

threadquery_hyper.scr

NUMCPUS=`grep ^proc /proc/cpuinfo | wc -l`;
FIRST=`cat /proc/stat | awk '/^cpu / {print $5}'`;
sleep 1;
SECOND=`cat /proc/stat | awk '/^cpu / {print $5}'`;
USED=`echo 2 k 100 $SECOND $FIRST - $NUMCPUS / - p | dc`;
AVA=$(echo "$NUMCPUS-$NUMCPUS*$USED/100" | bc -l);
HOSTVAL=$(hostname)
THREADCORRECT=$(echo "$AVA/2" | bc -l);
echo "Estimated avaliable processors on $HOSTVAL";
echo $THREADCORRECT | awk -F\. '{if(($2/10^length($2)) >= .5) printf("%d\n",$1+1);else printf("%d\n",$1)}';
4

1 回答 1

1

据我了解,您正在寻找的信息可以从“TOP”中检索到

http://www.cyberciti.biz/tips/how-do-i-find-out-linux-cpu-utilization.html

信息取自“TOP”的“Tasks”部分

#!/bin/bash

getthreads=`top -n 1 | awk '/running/ {print $2, $4, $6}'`
totalthreads=`echo "$getthreads" | awk ' {print $1 } '`
runningthreads=`echo "$getthreads" | awk ' {print $2 } '`
availablethreads=`echo "$getthreads" | awk ' {print $3 } '`

echo "Total threads: $totalthreads"
echo "Threads is use: $runningthreads"
echo "Threads available: $availablethreads"

这是一个脚本,可以提取您需要的数据并将其输出。您可以根据需要进行调整。希望这可以帮助

于 2013-07-21T03:45:04.100 回答