确定在远程机器上的空闲线程数(Determine number of idle threads on

2019-10-18 10:01发布

我们正在研究一个脚本,将告诉我们有多少线程可在我们组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可用于密码传递给它; 不过,我不能在这些计算机上安装这样的程序。

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)}';

Answer 1:

从我的理解,你正在寻找的信息可以从“顶”检索

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

的信息从“任务”“顶部”的部分截取

#!/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"

这里是提取你需要的数据,并输出它的脚本。 你可以调整你所需要的。 希望这可以帮助



文章来源: Determine number of idle threads on remote machines