How to use top command in Linux
How to use top command in Linux
The `top` command is one of the most essential system monitoring tools in Linux, providing real-time information about running processes, system resource usage, and overall system performance. Whether you're a system administrator troubleshooting performance issues or a developer monitoring application behavior, mastering the `top` command is crucial for effective Linux system management.
This comprehensive guide will walk you through everything you need to know about using the `top` command, from basic usage to advanced customization options and practical troubleshooting scenarios.
What is the top command?
The `top` command (table of processes) is a built-in Linux utility that displays a dynamic, real-time view of running processes and system resource utilization. It shows information about CPU usage, memory consumption, running processes, and system load, updating this information at regular intervals (typically every 3 seconds by default).
Unlike static commands that provide a snapshot of system information, `top` continuously refreshes its display, making it invaluable for monitoring system performance over time and identifying resource-intensive processes that may be causing performance issues.
Basic syntax and usage
Starting top
To launch the `top` command, simply open a terminal and type:
```bash
top
```
This will display the default `top` interface with real-time system information. The display refreshes automatically every few seconds, showing the most current data about your system's performance.
Understanding the top display
The `top` command interface consists of two main sections:
1. System summary area (top portion) - Shows overall system statistics
2. Process list area (bottom portion) - Displays individual process information
System summary section explained
The upper portion of the `top` display contains crucial system-wide information:
Load average and uptime
```
top - 14:32:45 up 2 days, 4:32, 2 users, load average: 0.85, 0.74, 0.68
```
- Current time: 14:32:45
- Uptime: System has been running for 2 days and 4 hours 32 minutes
- Users: 2 users currently logged in
- Load average: 1-minute, 5-minute, and 15-minute load averages
Task summary
```
Tasks: 185 total, 2 running, 183 sleeping, 0 stopped, 0 zombie
```
- Total tasks: Total number of processes
- Running: Currently executing processes
- Sleeping: Idle processes waiting for resources
- Stopped: Manually stopped processes
- Zombie: Terminated processes awaiting cleanup
CPU usage
```
%Cpu(s): 12.5 us, 3.2 sy, 0.0 ni, 84.1 id, 0.2 wa, 0.0 hi, 0.0 si, 0.0 st
```
- us (user): CPU time spent on user processes
- sy (system): CPU time spent on kernel processes
- ni (nice): CPU time spent on low-priority processes
- id (idle): CPU idle time
- wa (wait): CPU time waiting for I/O operations
- hi (hardware interrupts): CPU time handling hardware interrupts
- si (software interrupts): CPU time handling software interrupts
- st (steal time): CPU time stolen by virtual machines
Memory usage
```
KiB Mem : 8052348 total, 1834512 free, 4125648 used, 2092188 buff/cache
KiB Swap: 2097148 total, 2097148 free, 0 used. 3654032 avail Mem
```
- Physical memory (Mem): Total, free, used, and buffer/cache memory
- Swap memory: Virtual memory statistics
- Available memory: Memory available for new processes
Process list section
The lower portion shows detailed information about individual processes in columns:
- PID: Process ID
- USER: Process owner
- PR: Priority level
- NI: Nice value
- VIRT: Virtual memory used
- RES: Physical memory used
- SHR: Shared memory
- S: Process status (R=running, S=sleeping, etc.)
- %CPU: CPU usage percentage
- %MEM: Memory usage percentage
- TIME+: Total CPU time used
- COMMAND: Process name/command
Essential keyboard shortcuts
While `top` is running, you can use various keyboard shortcuts to control and customize the display:
Navigation and control
- q: Quit top
- Space: Manually refresh display
- h or ?: Display help screen
- f: Add or remove columns from display
- F or O: Choose sort field
- R: Toggle sort order (ascending/descending)
Process management
- k: Kill a process (prompts for PID and signal)
- r: Renice a process (change priority)
- u: Filter processes by username
- V: Forest view (show process hierarchy)
Display customization
- 1: Toggle between single and per-CPU statistics
- t: Toggle CPU summary display format
- m: Toggle memory summary display format
- c: Toggle command line/program name display
- x: Highlight sort column
- y: Highlight running tasks
Advanced top command options
Command-line options
You can modify `top`'s behavior using command-line options:
```bash
Update every 1 second instead of default 3
top -d 1
Show processes for specific user
top -u username
Display only specified number of iterations then exit
top -n 5
Batch mode (useful for scripts)
top -b
Show processes in forest view
top -c
```
Combining options
```bash
Monitor specific user with 1-second updates for 10 iterations
top -u apache -d 1 -n 10
Batch mode with custom delay for logging
top -b -d 5 -n 12 > system_performance.log
```
Practical use cases and examples
Monitoring system performance
Identifying high CPU usage processes
When system performance is sluggish, use `top` to identify CPU-intensive processes:
1. Launch `top`
2. Press P to sort by CPU usage
3. Look for processes with high %CPU values
4. Note the COMMAND column to identify problematic applications
Monitoring memory consumption
To identify memory leaks or high memory usage:
1. Press M to sort by memory usage
2. Monitor the %MEM and RES columns
3. Watch for processes with continuously increasing memory usage
4. Check the system memory summary for available memory
Tracking specific user activity
Monitor processes for a specific user account:
```bash
top -u www-data
```
This is particularly useful for monitoring web server processes or specific application users.
Troubleshooting scenarios
High load average investigation
When experiencing high load averages:
1. Check the load average values in the top line
2. Compare with the number of CPU cores (load should typically be below core count)
3. Look for processes in R (running) or D (uninterruptible sleep) state
4. Identify processes with high CPU or I/O wait times
Memory shortage diagnosis
When system appears to be running out of memory:
1. Monitor the memory summary section
2. Look for high swap usage
3. Identify processes with large RES (resident memory) values
4. Check for zombie processes that may indicate memory issues
Customizing top display
Saving custom configurations
You can save your preferred `top` settings:
1. Customize the display using keyboard shortcuts
2. Press W to write the current configuration
3. Settings are saved to `~/.toprc`
Field selection and ordering
Press f to access the field selection screen where you can:
- Toggle fields on/off using letter keys
- Reorder fields using uppercase letters
- Select sort field with s
Color customization
Press z to toggle color mode, then:
- Z: Access color mapping screen
- Choose different color schemes for better visibility
- Customize colors for different process states
Alternative top variants
htop command
`htop` is an enhanced version of `top` with additional features:
```bash
Install htop (Ubuntu/Debian)
sudo apt install htop
Install htop (RHEL/CentOS)
sudo yum install htop
Run htop
htop
```
Advantages of htop:
- Mouse support
- Horizontal scrolling
- Tree view of processes
- Color-coded CPU and memory bars
- Easier process management
atop command
For more detailed system monitoring:
```bash
Install atop
sudo apt install atop
Run atop
atop
```
Features of atop:
- Historical data storage
- Network and disk I/O statistics
- More detailed resource usage information
Scripting with top
Batch mode for automation
Use batch mode to collect data for scripts:
```bash
#!/bin/bash
Script to log top 10 CPU processes
top -b -n 1 | head -n 17 | tail -n 10 > cpu_usage.log
```
Monitoring specific processes
```bash
#!/bin/bash
Monitor Apache processes
top -b -n 1 -u apache | grep httpd > apache_status.log
```
Creating performance reports
```bash
#!/bin/bash
Generate system performance report
echo "System Performance Report - $(date)" > report.txt
echo "=================================" >> report.txt
top -b -n 1 | head -n 5 >> report.txt
echo "" >> report.txt
echo "Top 10 CPU Processes:" >> report.txt
top -b -n 1 | head -n 17 | tail -n 10 >> report.txt
```
Troubleshooting common issues
top command not responding
If `top` appears frozen or unresponsive:
- Press q to quit
- Use Ctrl+C to force termination
- Check terminal size and resize if necessary
- Verify sufficient system resources
Incorrect display formatting
When the display appears garbled:
- Check terminal compatibility
- Verify TERM environment variable: `echo $TERM`
- Try resetting terminal: `reset`
- Use batch mode as alternative: `top -b`
Permission issues
For process monitoring limitations:
- Some process information may be restricted to root
- Use `sudo top` for complete system visibility
- Regular users can only modify their own processes
High resource usage by top itself
If `top` consumes too many resources:
- Increase update delay: `top -d 5`
- Reduce number of processes displayed
- Use batch mode for automated monitoring
- Consider alternatives like `htop` or `ps`
Best practices
Monitoring guidelines
1. Regular monitoring: Use `top` regularly to establish baseline performance
2. Combine tools: Use `top` with other monitoring tools for comprehensive analysis
3. Document baselines: Record normal CPU and memory usage patterns
4. Automate monitoring: Use batch mode for automated performance logging
Performance optimization
1. Increase update interval for less system impact: `top -d 5`
2. Limit process display to reduce overhead
3. Use batch mode for scripting to minimize interactive overhead
4. Save configurations to maintain consistent monitoring setup
Security considerations
1. Limit access to sensitive process information
2. Use specific user monitoring when appropriate
3. Be cautious with kill commands to avoid system instability
4. Monitor for unauthorized processes during regular checks
Conclusion
The `top` command is an indispensable tool for Linux system administration and performance monitoring. By understanding its interface, mastering keyboard shortcuts, and learning to interpret the wealth of information it provides, you can effectively monitor system health, troubleshoot performance issues, and optimize resource usage.
From basic system monitoring to advanced scripting and automation, `top` offers the flexibility and power needed for comprehensive system management. Whether you're investigating high CPU usage, tracking memory consumption, or monitoring specific processes, the techniques and examples provided in this guide will help you leverage `top` effectively in your daily Linux administration tasks.
Remember to practice using different options and shortcuts to become proficient with this powerful monitoring tool. Combined with other Linux utilities and monitoring solutions, `top` forms the foundation of effective system performance management and troubleshooting workflows.