确定远程计算机上的空闲线程数

时间:2013-07-19 18:17:09

标签: bash shell ssh cpu-usage remote-access

我们正在开发一个脚本,告诉我们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)}';

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"

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