Some times it is not straight forward to call some remote commands using ssh (example of syntax here). Commands like top will not execute as is because they need some environment variables modified due to their interactive nature.
Usage example of wrong remote call to top and its result:
ssh remoteMachine 'top' TERM environment variable not set.
We cannot really describe all of the solutions available but since we are talking about top, we will present a very simple solution.
Luckily, top can be executed in batch mode, which is used for sending output from top to other programs or files by invoking the -b parameter and thus changing the command syntax to:
ssh remoteMachine 'top -b'
This will work just fine but give you a full page of results which might be too much info. To limit the results that you are receiving you can filter the top command results with other commands like head. In the following example we use head to limit the number of rows retrieved to 8, so that we get the system status and the most computational intensive command of our system.
ssh remoteMachine 'top -b | head -n 8'
Which will result to something like this:
top - 07:29:38 up 1:04, 0 users, load average: 2.85, 2.83, 2.24 Tasks: 62 total, 2 running, 60 sleeping, 0 stopped, 0 zombie Cpu(s): 27.8%us, 0.4%sy, 0.0%ni, 71.7%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st Mem: 1022116k total, 68960k used, 953156k free, 4364k buffers Swap: 3905532k total, 0k used, 3905532k free, 22776k cached PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 842 userName 20 0 32212 1320 1120 R 188 0.1 46:51.91 application.binary
This post is also available in: Greek
Thank you! This was a life saver!
Thanks, it also save my time, because my “top” command isnt working still but your “top -b | head -n 8” works fine…
Thanks for your TIP! it’s very useful tip
Top -b -d 10 does not work on ssh for me. Would you know of a work around to set -d? Thanks!
Hello,
What is it you are trying to achieve?
Executing ssh user@remote ‘top -b -d 0.1’ will show you the remote processes and refresh every 0.1 seconds.
Executing ssh user@remote ‘top -b -d 10’ will show you the remote processes and refresh every 10 seconds.
thanks a lot
Of you could simply tell ssh to produce a full tty by running it with the -t flag.
You have a point but please do not forget that, some servers could abort the transaction if a pseudo-terminal is requested.
Not using
-t
(or using-T
) eliminates this issue.