HowTo: Find Out Top Processes By Memory Usage In Linux

It is quite a common situation when your server is out of memory and you want to check what processes are using all the RAM and swap.

In this small note you’ll find two similar commands that can find out and sort top processes by memory usage on your Linux system.

I’ve successfully used these commands on: Linux Mint, Ubuntu, Debian, CentOS, RHEL.

Use any of the following commands to display top 10 processes (including child processes) that use the most memory on your Linux machine.

Show What Processes Are Using All The RAM in Linux

Use the following command to find out top processed sorted by memory usage, in megabytes (MB):

ps axo rss,comm,pid \
| awk '{ proc_list[$2]++; proc_list[$2 "," 1] += $1; } \
END { for (proc in proc_list) { printf("%d\t%s\n", \
proc_list[proc "," 1],proc); }}' | sort -n | tail -n 10 | sort -rn \
| awk '{$1/=1024;printf "%.0fMB\t",$1}{print $2}'

Example: Just copy/paste the above command to your terminal and press ENTER to display top 10 processes, sorted by memory usage. You should get the similar output:

admin@phantom ~ $ ps axo rss,comm,pid \
| awk '{ proc_list[$2]++; proc_list[$2 "," 1] += $1; } \
END { for (proc in proc_list) { printf("%d\t%s\n", \
proc_list[proc "," 1],proc); }}' | sort -n | tail -n 10 | sort -rn \
| awk '{$1/=1024;printf "%.0fMB\t",$1}{print $2}'

1047MB	firefox
648MB	VirtualBox
177MB	thunderbird
119MB	Xorg
82MB	python
82MB	remmina
60MB	pidgin.orig
48MB	caja
47MB	apache2
33MB	puppet

Display Processes Sorted By Memory Usage in Linux

Use the following command to display processes that are using all the memory, in megabytes (MB):

ps axo rss,comm,pid \
| awk '{ proc_list[$2] += $1; } END \
{ for (proc in proc_list) { printf("%d\t%s\n", proc_list[proc],proc); }}' \
| sort -n | tail -n 10 | sort -rn \
| awk '{$1/=1024;printf "%.0fMB\t",$1}{print $2}'

Example: Just copy/paste the above command to your terminal and press ENTER to check what processes are using all the RAM and swap. You should get the similar output:

admin@phantom ~ $ ps axo rss,comm,pid \
| awk '{ proc_list[$2] += $1; } END \
{ for (proc in proc_list) { printf("%d\t%s\n", proc_list[proc],proc); }}' \
| sort -n | tail -n 10 | sort -rn \
| awk '{$1/=1024;printf "%.0fMB\t",$1}{print $2}'

1022MB	firefox
648MB	VirtualBox
177MB	thunderbird
119MB	Xorg
82MB	python
82MB	remmina
60MB	pidgin.orig
48MB	caja
47MB	apache2
33MB	puppet