我们正在开发一个脚本,告诉我们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使用量并从cpus总量中减去来估计可用cpu的数量,并根据需要针对超线程进行更正。
我还要注意,此实现基于使用公共/私有ssh密钥来推迟密码输入,但sshpass可用于将密码传递给它;但是,我不允许在这些计算机上安装此类程序。
checker.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
threadquery.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)}';
答案 0 :(得分:1)
根据我的理解,您可以从“TOP”
中检索您要查找的信息http://www.cyberciti.biz/tips/how-do-i-find-out-linux-cpu-utilization.html
该信息来自“TOP”的“任务”部分
#!/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"
这是一个脚本,它提取您需要的数据并将其输出。您可以根据需要进行调整。 希望这有帮助