php 通过SSH获取CPU使用率

aurhwmvo  于 2022-11-28  发布在  PHP
关注(0)|答案(5)|浏览(221)

我想通过SSH检索CPU利用率百分比,我已经尝试了命令“top”,但它不允许。
我使用的是CentOS 6。
我试过这个密码

$connection = ssh2_connect("IP", PORT);
ssh2_auth_password($connection, "root", "PASS");
$stream = ssh2_exec($connection, "top");
$errorStream = ssh2_fetch_stream($stream, SSH2_STREAM_STDERR);

// Enable blocking for both streams
stream_set_blocking($errorStream, true);
stream_set_blocking($stream, true);

// Whichever of the two below commands is listed first will receive its appropriate output.  The second command receives nothing
echo "Output: " . stream_get_contents($stream);
echo "Error: " . stream_get_contents($errorStream);

// Close the streams        
fclose($errorStream);
fclose($stream);

但李世民每次都给予我一个错误:输出:错误:未设置TERM环境变量。
我用的是PHP。

zhte4eai

zhte4eai1#

谢谢大家,但我管理。我做了这个命令:

top -b -n 10 -d.2 | grep 'Cpu' |  awk 'NR==3{ print($2)}'
piv4azn7

piv4azn72#

您可以使用

top -n 1
mpstat
iostat
jucafojl

jucafojl3#

更好的方法是简单地安装扫视。

sudo apt install glances

然后简单地运行glances。然后您的输出将如下所示。您可以更改更新速度。

$yourhostname - IP x.x.x.x/x Pub xx.xxx.xxx.xxx                  Uptime: 0:41:24

CPU  [  1.4%]   CPU -     1.4%  MEM -   10.8%  SWAP -    0.0%  LOAD    12-core
MEM  [ 10.7%]   user:     1.0%  total:  31.4G  total:   2.00G  1 min:    0.71
SWAP [  0.0%]   system:   0.4%  used:   3.38G  used:        0  5 min:    0.73
                idle:    98.5%  free:   28.0G  free:    2.00G  15 min:   0.69

NETWORK     Rx/s   Tx/s   TASKS 322 (1136 thr), 1 run, 235 slp, 86 oth 
eno1          0b     0b
lo           2Kb    2Kb   Systemd          6    Services loaded: 190 active: 190
_xxxxxxxx     0b    4Kb
                            CPU%  MEM%   PID USER        NI S Command 
DefaultGateway     62ms      4.2   0.9  1923 xxx          0 S cinnamon --replace
                             2.9   0.1  9055 xxx          0 R /usr/bin/python3 /
DISK I/O     R/s    W/s      1.9   0.5  1323 root         0 S /usr/lib/xorg/Xorg
disk1          0    91K      1.3   0.0  1338 root         0 S irq/74-nvidia
partition1     0      0      1.3   0.1  8586 xxx          0 S /usr/lib/gnome-ter
partition2     0    91K      1.0   0.4  8907 xxx          0 S /opt/google/chrome
sda1           0      0      0.6   1.0  5381 xxx          0 S /home/xxx/Programs
sdc1           0      0      0.3   0.5  2102 xxx          0 S /opt/google/chrome
                             0.3   0.4  2689 xxx          0 S /opt/google/chrome
FILE SYS    Used  Total      0.3   0.6  4831 xxx          0 S /home/xxx/Programs
/          15.6G   228G
2019-02-13 05:39:04       No warning or critical alert detected
fcy6dtqo

fcy6dtqo4#

phpseclib, a pure PHP SSH implementation,有一个关于如何用它在PHP中做top的漂亮讨论:
http://phpseclib.sourceforge.net/ssh/pty.html#top
你需要一个PTY。

$ssh->enablePTY();
$ssh->exec('top');
$ssh->setTimeout(5);
$ansi->appendString($ssh->read());
echo $ansi->getScreen();

您也可以在交互模式下执行此操作:

$ansi->appendString($ssh->read('username@username:~$'));
$ssh->write("top\n");
$ssh->setTimeout(5);
$ansi->appendString($ssh->read());
echo $ansi->getScreen();

请注意,输出将包含ANSI转义码。下面是一个将ANSI转义码转换为HTML的示例:
http://phpseclib.sourceforge.net/ssh/examples.html#top

z3yyvxxp

z3yyvxxp5#

top表示当前时刻的CPU负载,因此当存在不连续使用CPU的进程时,可能会产生误导。

cat /proc/loadavg | awk '{print $1, $8}'
  • 将输出最后1分钟的平均系统负载。对于空闲系统,它将是0.0,对于负载系统,它将是0.51.5及以上。当启动重任务时-它将立即跳到0.1以上。

为了等待空闲系统,我用途:

while true
  do
    load=`cat /proc/loadavg | awk '{print $1, $8}'`
    if (( $(echo "$load < 0.05" |bc -l) )); then
      break
    fi
    echo -ne "Waiting for idle system: $load> 0.05... \033[0K\r"
    sleep 1
  done

相关问题