Monitoring System Resources On Linux
Monitoring your resources is good practice and essential to keeping your server healthy and preventing downtime. This guide will quickly go over a few of the tools needed in the arsenal of a successful administrator. In particular we will go over some useful tools that analyze running processes, disk usage, and memory usage.
To view all running processes on your server you can use the top command.
$ top top - 02:13:35 up 55 days, 14:50, 1 user, load average: 0.12, 0.11, 0.12 Tasks: 197 total, 1 running, 195 sleeping, 1 stopped, 0 zombie %Cpu(s): 2.9 us, 5.9 sy, 0.0 ni, 91.2 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st MiB Mem : 7957.7 total, 4228.9 free, 1757.0 used, 1971.8 buff/cache MiB Swap: 124.0 total, 124.0 free, 0.0 used. 5896.0 avail Mem PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 11 root 20 0 0 0 0 I 6.2 0.0 214:36.75 rcu_sched 3848281 root 20 0 9432 3968 3296 R 6.2 0.0 0:00.02 top 1 root 20 0 169476 12828 8476 S 0.0 0.2 14:35.96 systemd 2 root 20 0 0 0 0 S 0.0 0.0 0:01.71 kthreadd 3 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 rcu_gp 4 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 rcu_par_gp
The first line prefixed with top displays how long your system has been running, the active users, and the systems load average. The second line displays the number of total tasks, how many are currently active, and how many are sleeping (inactive). The third line contains information about the CPU load. Finally the fourth and fifth line contains information about allocated memory and unused memory (total and swap).
- PID: Shows the task’s unique process id.
- USER: The owner of the task.
- PR: The process’s priority. The lower the number, the higher the priority.
- NI: Represents the Nice Value of a task. A Negative nice value implies higher priority, and a positive Nice value means lower priority.
- VIRT: Total virtual memory used by the task.
- RES: How much physical RAM the process is using, measured in kilobytes.
- SHR: Represents the Shared Memory size (kb) used by a task.
- S: Shows the current state of the command.
- %CPU: Represents the CPU usage.
- %MEM: Shows the Memory usage of a task.
- TIME+: CPU Time, the same as ‘TIME’, but reflecting more granularity through hundredths of a second.
- COMMAND: The name of the command that started the process.
This information can be useful for many reasons. Here is an example of one such scenario: Suppose you have a long-running, stuck, or unresponsive process. You can simply stop it by passing the process ID (PID) to the
kill command. In this example let’s say that the PID is
1234, then you can use the following command to kill the process:
$ kill -9 1234
A great alternative to
topbut much easier on the eyes. It also allows for more straightforward filtering. More information can be found here.
df command provides you with an overview of how much disk space is used and available on your attached drives.
$ df Filesystem 1K-blocks Used Available Use% Mounted on udev 4042404 0 4042404 0% /dev tmpfs 814868 1932 812936 1% /run /dev/mapper/JetrailsVol1-lv_slash 40792616 7016144 33776472 18% / tmpfs 4074324 0 4074324 0% /dev/shm tmpfs 5120 0 5120 0% /run/lock tmpfs 4074324 0 4074324 0% /sys/fs/cgroup /dev/vda1 996004 174576 821428 18% /boot tmpfs 814864 0 814864 0% /run/user/0
If you want this list in megabytes you can run the same command with the
$ df -h Filesystem Size Used Avail Use% Mounted on udev 3.9G 0 3.9G 0% /dev tmpfs 796M 1.9M 794M 1% /run /dev/mapper/JetrailsVol1-lv_slash 39G 6.7G 33G 18% / tmpfs 3.9G 0 3.9G 0% /dev/shm tmpfs 5.0M 0 5.0M 0% /run/lock tmpfs 3.9G 0 3.9G 0% /sys/fs/cgroup /dev/vda1 973M 171M 803M 18% /boot tmpfs 796M 0 796M 0% /run/user/0
du command is used to get the size of the current directory and sub-directories. Similar to the above example, we will run
du with the
-h flag to get a more human-readable output.
$ du -h 8.0K ./.ssh 12K ./.cache/pip/http/5/2/9/4/6 12K ./.cache/pip/http/5/2/9/4 12K ./.cache/pip/http/5/2/9 12K ./.cache/pip/http/5/2 12K ./.cache/pip/http/5 88K ./.cache/pip/http/f/0/7/9/d 88K ./.cache/pip/http/f/0/7/9 88K ./.cache/pip/http/f/0/7 88K ./.cache/pip/http/f/0
free command allows you to check your system’s current memory usage.
$ free total used free shared buff/cache available Mem: 8148652 1796412 4332960 4888 2019280 6040196 Swap: 126972 0 126972
If you would like to see the output converted to megabytes, then you can run the same command with the
$ free -m total used free shared buff/cache available Mem: 7957 1754 4230 4 1971 5898 Swap: 123 0 123
The commands described in this article are a great set of tools when starting to debug issues. They will come in handy when you may be experiencing problems, but please note that these command-line tools only scratch the surface of what’s available for Linux. I’d advise you to do some searching as there may be other tools that better suit your needs.