Max Wong
Max Wong

Reputation: 750

How to get the memory and cpu usage of a remote server?

My intent is to log into several servers and print out their memory & cpu usage one by one. I wrote the follow scripts

START=1 
END=5
for i in {$START..$END}
do
    echo "myserver$i"
    ssh myserver$i
    free -m | awk 'NR==2{printf "Memory Usage: %s/%sMB (%.2f%%)\n", $3,$2,$3*100/$2 }'
    top -bn1 | grep load | awk '{printf "CPU Load: %.2f\n", $(NF-2)}'
    logout
done

But it doesn't work. Who can give a solution to this? Thanks a lot!

Upvotes: 1

Views: 9472

Answers (3)

Max Wong
Max Wong

Reputation: 750

After searching online and combining a few answers from other questions on stackflow. I get the following solution.

Solution

On your local computer, you might want to have the following bash script, named, say, usage_ssh

START=1
END=3
date
for i in $(seq $START $END)
do
        printf '=%.0s' {1..50};
        printf '\n'
        echo myservery$i
        ssh myserver$i -o LogLevel=QUIET -t "~/bin/usage"
done
printf '=%.0s' {1..50};
printf '\n'
printf 'CPU Load: \n'
printf 'First Field\tprocesses per processor\n'
printf 'Second Filed\tidling percentage in last 5 minutes\n'
printf '\n'
printf '\n'

On your remote server, you should have the following bash script named usage. This script should be located in ~/bin.

free -m | awk 'NR==2{printf "Memory Usage\t%s/%sMB\t\t%.2f%\n", $3, $2, $3/$2*100}';
top -n 1 | grep load | awk '{printf "CPU Load\t%.2f\t\t\t%.2f\n", $(NF-2), $(NF-1)}';

Explanation

The idea is that You will call the use ssh -t <your command> to run executable on your remote file and get the output on the screen of your local computer.

Output

Sat Mar 28 10:32:34 CDT 2020
==================================================
myserver1
Memory Usage    47418/48254MB       98.27%
CPU Load        0.01                0.02
==================================================
myserver2
Memory Usage    47421/48254MB       98.27%
CPU Load        0.01                0.02
==================================================
myserver3
Memory Usage    4300/84541MB        5.09%
CPU Load        0.02                0.02
==================================================
CPU Load: 
First Field processes per processor
Second Filed    idling percentage in last 5 minutes

Upvotes: 1

Angel O&#39;Sphere
Angel O&#39;Sphere

Reputation: 2666

Look carefully at your code. After the SSH command, you are on the remote server, in an SSH shell. And obviously your script now wants you to talk (via keyboard) to the remote server. When it is finished, e.g. if you hit ctrl-c or ctrl-d, then the next commands like "free" and "top" are running on your local machine.

You have to tell ssh with a kind of "-exec" argument that it should execute free and top on the remote server :D

I'm sure you figure it out yourself how to do that, have fun.

Upvotes: 4

CodeGuru
CodeGuru

Reputation: 72

There is one useful command for CPU/mem usage - top. To get the result, run this command. CPU Usage - top -b -n 1 | grep Cpu Mem Usage - top -b -n 1 | grep 'KiB Mem'

Upvotes: 0

Related Questions