Server Memory "Dell PowerEdge 840 RAM Upgrade" by Andy Melton is licensed under CC BY 2.0.

How to Check Amount of Available Server Memory

GeekThis happily runs on Vultr. Get $300 of free hosting credits to try out their cloud compute, kubernetes engine, or managed databases. Try Vultr today to claim your free $300.

In the sections below you will learn how to identify the amount of memory that is installed on your server, check how much of the RAM is being used, and see a list of the applications using the most memory. Other than physical memory that is installed on your server, servers may also have burst memory, VSwap, and Swap memory.

Before the main tutorial, some basic knowledge about the types of memory may come in handy. First we have physical memory which is the memory that is physically installed onto the motherboard. Swap memory is used when the physical memory has approached its limit; your operating system will start storing memory onto your hard drive, also known as Swap memory. VSwap is similar to Swap memory, but VSwap is used for VPS servers that use OpenVZ. VSwap allocates unused physical memory from the server and provides it as Swap Memory, but it does artificially slow down the reading and writing to the memory. Finally burst memory is something that mostly belongs in the past. Providers would provide additional memory to your VPS when you were starting to run low on memory if any additional memory on the server was available.

Check Amount of Memory

Checking the amount of physical memory on your Linux server is very simple. You want to use the command free to display the amount of memory that is currently used, free, and available. By default, the free command will use kilobytes for each column. I prefer using the option for free --human to display the values in a unit that better represents the value.

The command returns multiple columns: total, used, free, shared, buffers, cache, buff/cache, and available. The column “total” displays the total installed memory. Next the “used” columns displays the amount of memory that is currently being used. The column “free” displays the amount of memory that is unused. Shared shows the memory used by tmpfs. Buffers displays the memory used by kernel buffers. Cache shows the memory used by the page cache and slabs. Buff/cache shows the sum of the “buffers” and “cache” columns. Finally the “available” columns is an estimate on how much memory is available for starting new applications without swapping.

$ free --human
              total        used        free      shared  buff/cache   available
Mem:           7.3G        837M        5.0G        219M        1.5G        6.0G
Swap:          7.4G          0B        7.4G

Looking at the results above, the device has a total of 7.3 gigabytes of physical memory with 837 megabytes currently being used. The device also has 7.4 gigabytes of Swap memory with zero bytes being used.

Check Amount of Used Memory

Checking the amount of used memory is identical to checking the amount of available memory that we described above. You will use the command free and look under the column “used” to view how much memory is currently allocated. Below is an example of how to check how much memory is currently free in kilobytes.

$ free
              total        used        free      shared  buff/cache   available
Mem:        7608168      973068     5082048      224184     1553052     6140968
Swap:       7807996           0     7807996

As you can see, under the “used” column in align with the “Mem” row, we are using 973068 kilobytes of memory out of the available 7608168 kilobytes that is available. As for “Swap,” we are using zero kilobytes of Swap memory. It’s possible that the amount of used memory will not align with the amount of memory being used by active processes on your system. If a process doesn’t properly free the allocated memory by the time it exits, the memory is still used even though it won’t appear in process lists.

List Programs using the Most Memory

Depending on your preferences, there are multiple programs that can list the active processes on your system along with the system resources each process is using. This tutorial will using the command ps to list processes and order the list by the memory usage. We are sorting by “RSS” (Resident Set Size) instead of “VSZ” (Virtual Memory Size) to get the amount of memory that is actually being stored in physical memory and isn’t swapped out. The “RSS” column will also include the amount of memory shared resources have allocated. For additional information on RSS and VSZ, read this StackOverflow answer explaining the difference between VSZ and RSS.

$ ps aux --sort -rss
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root      5793  1.6 38.8 199492 195976 tty1    S+   02:39   0:00 ./memory_hog
root       699  0.0  1.3  97360  6996 ?        Ss   02:28   0:00 sshd: user [priv]
root         1  0.2  1.3  56964  6752 ?        Ss   02:27   0:01 /sbin/init
user       701  0.0  1.2  64868  6352 ?        Ss   02:29   0:00 /lib/systemd/systemd --user
root       733  0.0  1.1  56420  5936 ?        Ss   02:29   0:00 /lib/systemd/systemd --user
root       351  0.0  1.1  69940  5604 ?        Ss   02:27   0:00 /usr/sbin/sshd -D
root       736  0.0  1.0  21112  5116 tty1     S    02:29   0:00 -bash

As you can see from the snippet above from the ps command, the program memory_hog is using 195976 kilobytes of memory and is the process that is currently using the most physical memory on the system. Sorting by RSS can give you a false view of what processes are using the majority of memory though. If an application allocates a small amount of memory but is using a shared library, the application may appear higher in the list even though it’s not using any additional memory as long as more than one application is using the shared library.

Related Posts

Automatically Start Docker Container

Automatically start Docker containers when your server or computer boots using restart policies and avoiding systemd service files.

How to Train SpamAssassin

Learn about the different methods used to train SpamAssassin, along with initial spam data sources to use with SpamAssassin. Update your bayes database easily with existing data.

SpamAssassin SA-Update Tool

Learn what SpamAssassin's sa-update tool does, how it works, and if you should keep it running and modifying the configuration files on your server.

Incremental MySQL Backup with Binary Log

Learn how to properly perform an incremental MySQL backup using binary logs without having a gap between backups and overall improve the speed of database backups.