570

How can I display the top results in my terminal in real time so that the list is sorted by memory usage?

7ochem
  • 141
  • 1
  • 1
  • 10
Theodor Coogan
  • 5,701
  • 3
  • 12
  • 3
  • 45
    On Linux, `>` and `<` move the sort column right and left. Since the `%MEM` column is just right of the `%CPU` column, which is also the default sort column, it takes only one keystroke to switch between the two. I know, your question has the macintosh tag, that's why I'm writing this answer as a comment. – Walter Tross Sep 19 '15 at 18:37
  • 16
    I prefer `htop`, mainly because it tells me how to do this. – lindhe Jan 19 '16 at 22:05
  • 3
    If using `htop`, in addition to `shift + M`, you will likely want to turn off the display of threads and just show the main process memory consumption with `shift + H`. See https://unix.stackexchange.com/a/10403/27902. – Elijah Lynn May 11 '22 at 00:10

9 Answers9

654

Use the top command in Linux/Unix:

top
  • press shift+m after running the top command
  • or you can interactively choose which column to sort on
    • press Shift+f to enter the interactive menu
    • press the up or down arrow until the %MEM choice is highlighted
    • press s to select %MEM choice
    • press enter to save your selection
    • press q to exit the interactive menu

Or specify the sort order on the command line

# on OS-X
top -o MEM
# other distros
top -o %MEM

References

https://stackoverflow.com/questions/4802481/how-to-see-top-processes-by-actual-memory-usage

Ramesh
  • 38,687
  • 43
  • 140
  • 215
121

The command line option -o (o standing for "Override-sort-field") also works on my Xubuntu machine and according to the Mac man page of top it should work on a Macintosh too. If I want to short by memory usage I usually use

top -o %MEM

which sorts by the column %MEM. But I can use VIRT, RES or SHR too. On a Macintosh I would probably use mem or vsize.

I don't know why or how but this is pretty much different between Unix systems and even between Linux distributions. For example -o isn't even available on my Raspberry running Wheezy. It may be worth give it a try though.

ytg
  • 1,347
  • 1
  • 9
  • 9
  • 3
    The answer could user more clarity: `%MEM` is given as an answer to the eager reader; while it doesn't work everywhere (by far). – 7heo.tk May 06 '15 at 15:00
  • 2
    For Macbook 2014 this is saying: `top -o %MEM invalid argument -o: %MEM` – fIwJlxSzApHEZIl Jun 01 '15 at 17:43
  • I'm sorry to hear that. – ytg Jun 01 '15 at 20:03
  • This is the only answer that actually worked on centos for me. – Alkanshel Mar 08 '16 at 22:40
  • Works on Debian 8 – marcovtwout Feb 27 '17 at 13:46
  • 2
    @anon58192932 you should replace `%MEM` (or `PID`, `VIRT`, etc.) by any column name that you see when running `top` only. As noted by *ytg*, "on a Macintosh I would probably use `mem` or `vsize`". – ebosi Mar 29 '17 at 01:59
  • or `cpu` from mac's top -h: `[-o ] [-O ] keys: pid (default), command, cpu, cpu_me, cpu_others, csw, time, threads, ports, mregion, mem, rprvt, purg, vsize, vprvt, kprvt, kshrd, pgrp, ppid, state, uid, wq, faults, cow, user, msgsent, msgrecv, sysbsd, sysmach, pageins, boosts, instrs, cycles` – alexey Feb 05 '18 at 19:53
  • +1 to the preceding comment. On my Mac (10.13.6), `top -o '%CPU'` did _not_ work, notwithstanding that "%CPU" is how the column header appears. `top -o CPU` worked fine, as did `top -o cpu`. – AbuNassar Aug 21 '18 at 14:23
  • 1
    Yep, just do `top -o MEM` since "MEM" is on the list. – devinbost Jul 30 '21 at 18:37
  • use `top -O` to get a list of the field names which could be used for that -o argument – charlie arehart Jun 04 '22 at 17:30
  • [top isn't a POSIX utility](https://pubs.opengroup.org/onlinepubs/9699919799/utilities/contents.html). Even POSIX utilities still only have a few standard options, but implementations will introduce their own extensions. Don't you see BSD `find` being vastly different from GNU `find` or busybox `find`? Depending on which userspace tool the distro uses you'll have different syntax – phuclv Aug 03 '22 at 05:41
25

For Ubuntu 14.04 starting with

htop -s PERCENT_MEM

or (equivalently)

htop --sort-key PERCENT_MEM

did the trick for me.

AdminBee
  • 21,637
  • 21
  • 47
  • 71
Borjovsky
  • 375
  • 3
  • 5
15

It seems like the -o flag will take the actual column name. So if the top command shows only "mem" then the command should be "top -o mem".

For the ubuntu machine I am testing with, the column is called "%MEM". On the OSX Yosemite I tried, it is "mem".

GlennTPeace
  • 159
  • 1
  • 2
7

The original question seems to have been for a Mac, but for anyone else stumbling across this answer, on Red Hat Linux (and many others), 'top -m' starts top with results sorted by memory usage.

Anthony
  • 71
  • 1
  • 4
7

If top is already running, press o . Above the data, a prompt will appear:

primary key [xxxxx]:

Where xxxxx is the current sorting key. Type the name of the column by which you want to sort. If a column name contains "%" or "#", omit the character. For %CPU, just type "cpu".

techraf
  • 5,831
  • 10
  • 33
  • 51
George Boutin
  • 94
  • 1
  • 2
7

On linux, run:

$ top

Then press, Shift + M.

slm
  • 363,520
  • 117
  • 767
  • 871
JBaczuk
  • 193
  • 1
  • 8
6

If you're using the top that comes with Ubuntu (top -v = procps-ng version 3.3.10), then you can use these interactive keyboard shortcuts to change the sorting. Note that these are all capital letters, so either use shift or caps lock.

M %MEM
N PID
P %CPU
T TIME+

By default, they will be sorted in DESC order. Use R to toggle ASC/DESC.

To set the sorting from the command line option, use top -o %MEM. You can specify any column.

wisbucky
  • 3,158
  • 1
  • 30
  • 18
5

Ubuntu 14.04 - this works just fine:

htop --sort-key=PERCENT_MEM
don_crissti
  • 79,330
  • 30
  • 216
  • 245