This guide delves into the top command in Linux, providing a clear overview of system performance with practical examples. Here will not only understand its functionalities but learn how to use them effectively.
The top command in Linux is a system monitoring tool that provides a dynamic, real-time view of the processes running on a system along with details about resource usage such as CPU, memory, and system load averages.
Real-time Monitoring: top updates its display in real-time (or at intervals you can set).
System Summary: Provides a quick summary of system status, like uptime, number of users, load averages, number of tasks, and CPU/Memory usage.
Process-Level View: Displays detailed information about each process, including its PID (process ID), user, CPU and memory utilization, and the command that initiated it.
Interactive Controls: Allows the user to interactively control its behavior, sort the display, and send signals to processes.
Simply typing top into your terminal will start it:
This will show you an overview of your system's activity. By default, it updates information every 3 seconds.
Let's dive deeper into the top command's output by dissecting it line by line.
Line 1: Example:
top - 07:27:26 up 449 days, 59 min, 1 user, load average: 0.04, 0.02, 0.00
top: This indicates you're using the top utility.
07:27:26: This is the current system time when the command was run, displayed in hh:mm:ss format.
up 449 days, 59 min: This shows how long the system has been running without a reboot. Here, it's been up for 449 days and 59 minutes.
1 user: This is the number of users currently logged into the system. In this case, there is 1 user logged in.
load average: 0.04, 0.02, 0.00: These values represent the system load averages for the last 1, 5, and 15 minutes respectively.
Tasks: This refers to processes or threads that the system is managing.
121 total: This shows the total number of tasks or processes on the system. In this case, there are 121 tasks.
1 running: This is the number of tasks currently using the CPU (i.e., being executed). Here, 1 task is running.
120 sleeping: This is the number of tasks that are not currently using the CPU but are waiting (sleeping) for it to become available so they can run. In this case, there are 120 sleeping tasks.
0 stopped: This is the number of tasks that have been stopped, usually by a signal. A stopped process can be continued later. Here, no tasks have been stopped.
0 zombie: This is the number of "zombie" processes. These are processes that have finished execution (called "terminated"), but their exit status hasn't been read by their parent process yet. Here, there are no zombie processes.
MiB Mem: This section describes the main physical memory (RAM) of the system, measured in Mebibytes (MiB).
3931.7 total: This is the total amount of physical RAM available on the system. In this case, it's 3931.7 MiB.
2011.2 free: This is the amount of physical RAM that is not being used, i.e., free memory. Here, 2011.2 MiB of memory is free.
296.5 used: This is the amount of physical RAM that is currently used by applications. Here, 296.5 MiB of memory is in use.
1624.0 buff/cache: This is the amount of RAM used for temporary storage (buffers and caches). Buffers are used for input/output operations, and caches are used to store frequently accessed data to quicken access time.
MiB Swap: This section describes the system's swap space, which is a form of virtual memory that can be used when the system's physical memory is full. It is slower since it's essentially disk space.
512.0 total: The total amount of swap space available on this system. In this case, it's 512.0 MiB.
471.5 free: The amount of swap space currently unused or free. Here, there are 471.5 MiB of swap space available for use.
40.5 used: The amount of swap space currently in use. In this instance, 40.5 MiB of swap space is being used.
3217.7 avail Mem: The available memory that can still be used by the system, which is calculated as free + buffers/cache. This means there are 3217.7 MiB of RAM available for new processes.
Generally from Line 1 to Line 5 section is named Summary Area - which contains statistics about the overall system state. Below Line 5 section is named Task Area.
In the Task Area, you'll see a table of currently running processes with several important details about each process. Here's what each column represents:
PID (Process ID): This is a unique identification number assigned to each process when it starts.
USER: This indicates the username of the person (or the system) who owns the process.
PR (Priority): This indicates the priority of the process. Tasks with higher priority will typically be given more CPU time.
NI (nice value): This is related to the priority of the process. A higher nice value means lower priority, while a lower nice value means higher priority.
VIRT(Virtual Memory Size): This represents the total amount of virtual memory used by the process.
RES(Resident Memory Size): This represents the portion of the process’s memory that is held in RAM.
SHR(Shared Memory): This represents the amount of shared memory used by a task. It simply reflects memory that could be potentially shared with other processes.
%CPU: This represents the share of CPU time used by the process since the last update.
%MEM: This represents the share of physical RAM used by the process.
TIME+: This represents the total CPU time that the task has taken since it started.
COMMAND: This is either the command line used to start the process or the name of this process.
top command is highly customizable. Below are some of the commonly used interactive commands within it.
q or Ctrl+C: Quit top.
h or ?: Display help, which shows many of the interactive commands.
Space: Refresh the display immediately.
l: Toggle the display of load average and uptime.
m: Toggle the display of memory information.
t: Toggle the display of processes and CPU states.
z: Toggle color highlighting.
c: Toggle the command column between showing command and program name.
E: This cycles through the available memory unit scales.
e: This cycles the memory unit for individual processes in the process list, just like E, but it affects the RES (resident size) column primarily.
c: The COMMAND column will expand to display the complete command line for each process.
V: To toggle tree view.
1: This toggles the display between showing individual CPU cores and an aggregate view.
z: Toggles the color display on or off.
Z: Allows you to change or customize the color configuration interactively.
W: Write your custom configurations to a file. Store in ~/.config/procps/toprc in newer versions of the procps-ng package.
P: Sort processes by CPU usage (default).
M: Sort processes by memory usage.
T: Sort processes by time/cumulative time.
N: sort processes by the PID column.
k: Kill a process. After pressing k, you'll be prompted to enter the PID of the process you want to kill.
r: Change the "niceness" of a process. This adjusts the priority of the process. After pressing r, you'll be prompted to enter the PID of the process you wish to renice.
i: Toggles the display to show only the currently active tasks.
n: Specify and limit the number of processes displayed on the screen.
f or F: Enter the field management mode. This allows users to add or remove columns from the display. Once in this mode, you can use the arrow keys to navigate and select/deselect fields.
Filtering and Searching:
u: Show only processes owned by a specific user. After pressing u, you'll be prompted to enter the username.
U: Remove user filter, showing processes of all users.
L: Prompt for a name to highlight/locate. Allows searching for processes by name.
Display Update Rate:
d or s: Change the refresh interval of top. After pressing this, you'll be prompted to enter the desired update interval in seconds.
Interpreting Load Averages
One important concept to understand when using the top command is the load average. In the top command output, the load average is displayed ( Line 1 right side) as three numbers right after the "load average" text.
Here's an example of what you might see:
load average: 0.09, 0.05, 0.01
The three numbers represent the system load averages for:
The last 1 minute
The last 5 minutes
The last 15 minutes
But what does a "load average" mean?
Load averages represent the average number of processes that are either in a runnable or uninterruptable state. A process is in a runnable state when it is either using the CPU or waiting to use the CPU; it's in an uninterruptable state when it is waiting for I/O access, like waiting for disk.
Here's how to interpret these values:
If your load averages are 0.0, that means your system is completely idle.
If the averages are 1.00, that means your system is fully utilized; if your system has multiple cores, then this number could go up till number of cores. For example, if you have 4 cores, and load average is under 4.00, your system still has processing power.
If the averages are above 1.00 (or above total number of cores in multi-core systems), then your system might be overloaded.
In general, for a single-core system, a load average of 1.00 is considered fully-loaded which is okay but it's something to watch. Anything above that indicates overload. For multi-core systems, you can divide the load average by the number of processor cores to get a comparable value.
Command Line Options
The top command in Linux comes with a variety of command-line options that allow you to customize its behavior, display only certain processes, and more. Here are some common command-line options that you might find useful:
-d: Changes the refresh interval in seconds.
top -d 2
In the above example, the command's output will refresh every 2 seconds.
-b: Runs top in batch mode, which could be useful for sending output from top to other programs or to a file. In this mode, it doesn't require a terminal to run.
top -b > top-output.txt
-c: This option tells top to display the full command path and command line arguments of the processes.
-u: Monitor all processes owned by a specific user.
top -u username
-p: Monitor only specific processes, specified by their process IDs (PIDs)
-n: Update the display this number of times, then exit.
top -n 10
This command will update the display 10 times before exiting.
-i: Do not display idle tasks
-o: Sorts the display by <field>. This allows you to order the processes by specific criteria from the start.
top -o %MEM
This will order processes by memory usage.
-s: In this mode, it will function normally in terms of displaying information but will restrict the following interactive commands: k, r and w.
Use Case Examples
Sorting Processes Using top
By default, the top command sorts processes by the %CPU usage in descending order. However, you can sort the processes by any field you want. The interactive shortcut method is a handy way to do it.
While top is running, you can quickly sort the display using various keyboard shortcuts:
Shift+M: Sort by memory usage (%MEM).
Shift+P: Sort by CPU usage (%CPU).
Shift+T: Sort by time/cumulative time.
Shift+N: Sort by PID (Process ID).
Alternatively, you can do this using command line argument. For example:
top -o %MEM
This command will sort processes by memory usage on most Linux distributions.
Sending Signals to Processes
Using the top command, you can interactively send signals to processes without leaving the utility.
Start top with the command top in your terminal.
While top is running, press the k key (This stands for "kill"). This will prompt you for the Process ID (PID), but the PID of the process you highlighted will be the default.
After you press enter, another prompt will appear asking for a signal to send. If you want to send a TERM (terminate) signal, which is the default, simply press enter again.
Apart from top, there are direct ways to send signals to processes using commands like kill, pkill, and killall, which offer more versatility in targeting and managing processes.
Batch Mode Operation of top
Batch mode is useful for capturing snapshots of top output at particular intervals. It can be very useful for scripting and data analysis tasks, as it allows you to process top's output with other commands or save it in a file for later analysis.
Use -b option for running top in batch mode:
If you want to redirect output to a file for later inspection or analysis, you can use the standard output redirection operator (>):
top -b -n 10 > top_output.txt
In this example, the output from 10 iterations of top running in batch mode will be saved to the file top_output.txt.
If this resource helped you, let us know your care by a Thanks Tweet.
Did you find this article helpful?
We are glad you liked the article. Share with your friends.