We have a no. of ways to check the overall memory usage but what if you want to monitor memory usage of some particular process.
To show an example I am running screen utility on my machine so lets try to find the memory used by the same.
The below command will create a screen with 50 lakhs line buffer by the name of "work"
# screen -h 5000000 -LS work
Once I execute this command a new screen will come up on the screen. To detach the screen press "ctrl + a + d"
Now on the screen lets see the PID of the running screen utility
# screen -ls There is a screen on: 2598.work (Detached) 1 Socket in /var/run/screen/S-root.
Here the pid for this screen utility is 2598
Lets check the memory utilization of the same
using ps command (this will show the memory utilization in percentage)
# ps -p 2598 v PID TTY STAT TIME MAJFL TRS DRS RSS %MEM COMMAND 2598 ? Ss 0:03 0 354 938689 821540 42.9 SCREEN -h 5000000 -LS work
So the screen utility is using 42.9% of my total available memory i.e. 1869 MB so screen is using 801 MB approximately.
Using top command
# top -p 2598 PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 2598 root 20 0 917m 802m 864 S 0.0 42.9 0:03.49 screen
So the output is similar to what we saw using ps command and it again shows us the %age usage but again there is one more section of VIRT which tells you the virtual memory used by the screen utility.
Basically Virtual memory is a logical combination of RAM memory and swap space which is used by running process.
Run the below command using the pid of the screen utility process
# cat /proc/2598/status | grep -i VMSIZE VmSize: 939044 kB
This will again show you the virtual memory used by the screen utility i.e. 917 MB
To understand the difference between Physical Memory, Virtual Memory and Swap space follow the below link
What is virtual memory, paging and swap space?