【问题标题】:Determine number of idle threads on remote machines确定远程机器上的空闲线程数
【发布时间】:2013-07-19 03:23:03
【问题描述】:

我们正在编写一个脚本,该脚本将告诉我们 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

线程查询.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)}';

【问题讨论】:

  • “线程总数”和“可用线程数”有什么区别?您是否希望某些 CPU 已被禁用/离线或其他情况(在这种情况下,IIRC,它们会从 /proc/cpuinfo 中消失)?
  • 一些线程将被人们使用。我们正在寻找可以使用的线程数。

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


【解决方案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"

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

【讨论】:

  • 嗯...在我们的系统上,这显示了 908 个“任务”,但我们有 96 个内核。我正在寻找一种方法来报告 96 个中有多少正在使用中。
猜你喜欢
  • 2013-07-25
  • 1970-01-01
  • 2019-12-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-15
  • 2013-05-04
  • 1970-01-01
相关资源
最近更新 更多