sar Command

Collect, report, and save system activity information for performance monitoring and analysis.

Syntax

sar [OPTIONS] [INTERVAL [COUNT]] sar [OPTIONS] -f [FILENAME]

The sar (System Activity Reporter) command is part of the sysstat package and provides comprehensive system performance monitoring capabilities.

Common Options

Option Description
-u Display CPU utilization statistics
-r Display memory utilization statistics
-d Display block device activity
-n DEV Display network device statistics
-b Display I/O and transfer rate statistics
-q Display queue length and load averages
-w Display task creation and system switching
-f Extract records from file
-s TIME Set starting time for report
-e TIME Set ending time for report

Basic Examples

CPU monitoring

# Display current CPU statistics sar -u # Monitor CPU every 2 seconds, 5 times sar -u 2 5 # Monitor CPU continuously every second sar -u 1 # Monitor all CPUs individually sar -P ALL 1 5

Monitor CPU utilization and performance

Memory monitoring

# Display memory utilization sar -r # Monitor memory every 5 seconds sar -r 5 10 # Display swap space utilization sar -S # Monitor memory and swap together sar -r -S 2 5

Monitor memory and swap usage

Disk I/O monitoring

# Display block device activity sar -d # Monitor disk I/O every 3 seconds sar -d 3 10 # Display I/O transfer rates sar -b # Monitor specific device sar -d -p 2 5

Monitor disk activity and I/O performance

Advanced Monitoring

Network monitoring

# Display network device statistics sar -n DEV # Monitor network interfaces every 2 seconds sar -n DEV 2 10 # Display network error statistics sar -n EDEV # Monitor TCP statistics sar -n TCP # Display socket statistics sar -n SOCK # All network statistics sar -n ALL 5 5

Monitor network interface activity and statistics

System load and processes

# Display queue length and load averages sar -q # Monitor system load every minute sar -q 60 10 # Display task creation and switching sar -w # Monitor process creation sar -w 5 12 # Display paging statistics sar -B

Monitor system load, processes, and paging activity

Comprehensive monitoring

# Monitor multiple metrics together sar -u -r -d -n DEV 5 10 # All system activity sar -A 10 6 # Custom monitoring script sar -u -r -q -d 30 > system_report.txt & # Monitor with timestamps sar -u -t 5 20

Comprehensive system monitoring with multiple metrics

Historical Data Analysis

Reading historical data

# Display data from today's log file sar -u -f /var/log/sysstat/sa$(date +%d) # Display yesterday's CPU data sar -u -f /var/log/sysstat/sa$(date -d yesterday +%d) # Display specific day's data sar -u -f /var/log/sysstat/sa15 # Display all available historical data sar -u -f /var/log/sysstat/sa*

Analyze historical system performance data

Time-based filtering

# Display data for specific time range sar -u -s 09:00:00 -e 17:00:00 -f /var/log/sysstat/sa15 # Morning hours analysis sar -r -s 08:00:00 -e 12:00:00 # Peak hours monitoring sar -d -s 14:00:00 -e 18:00:00 -f /var/log/sysstat/sa$(date +%d) # Night time analysis sar -u -s 22:00:00 -e 06:00:00 -f /var/log/sysstat/sa15

Filter historical data by time ranges

Practical Examples

Performance troubleshooting

# Identify CPU bottlenecks sar -u 1 60 | awk '$3 > 80 {print "High CPU at", $1}' # Monitor memory pressure sar -r 5 20 | awk '$4 < 10 {print "Low memory at", $1}' # Check disk I/O issues sar -d 2 30 | awk '$4 > 100 {print "High I/O on", $2, "at", $1}' # Network utilization analysis sar -n DEV 5 10 | grep eth0

Use sar for performance troubleshooting and bottleneck identification

Capacity planning

# Weekly CPU trend analysis for day in {01..07}; do echo "Day $day:" sar -u -f /var/log/sysstat/sa$day | tail -1 done # Peak memory usage over time sar -r -f /var/log/sysstat/sa* | awk '{if($4

Analyze trends for capacity planning and resource allocation

Automated monitoring

#!/bin/bash # Automated system monitoring script DATE=$(date +%Y%m%d) REPORT_DIR="/var/log/performance" # Create daily performance report { echo "System Performance Report - $(date)" echo "==================================" echo echo "CPU Utilization Summary:" sar -u | tail -1 echo echo "Memory Usage Summary:" sar -r | tail -1 echo echo "Disk I/O Summary:" sar -d | tail -1 echo echo "Network Activity Summary:" sar -n DEV | grep -E "(eth0|wlan0)" | tail -2 } > "$REPORT_DIR/performance_$DATE.txt" # Email report if issues detected if sar -u 1 1 | awk 'NR==4 {if($5 < 20) exit 1}'; then mail -s "High CPU Alert" [email protected] < "$REPORT_DIR/performance_$DATE.txt" fi

Automate performance monitoring and alerting

Data Collection Setup

Configuring sysstat

# Install sysstat package # Ubuntu/Debian sudo apt update && sudo apt install sysstat # RHEL/CentOS/Fedora sudo yum install sysstat # or sudo dnf install sysstat # Enable data collection sudo systemctl enable sysstat sudo systemctl start sysstat # Check service status sudo systemctl status sysstat

Install and configure sysstat for automatic data collection

Customizing data collection

# Edit sysstat configuration sudo nano /etc/sysstat/sysstat # Key settings: # HISTORY=28 # Keep 28 days of data # COMPRESSAFTER=10 # Compress files after 10 days # SADC_OPTIONS="" # Additional sadc options # Modify collection interval in crontab sudo crontab -e # Add or modify: # */5 * * * * /usr/lib/sysstat/sa1 1 1 # Manual data collection sudo /usr/lib/sysstat/sa1 1 1 # Generate daily summary sudo /usr/lib/sysstat/sa2

Customize data collection intervals and retention

Output Formats and Analysis

Understanding sar output

CPU Statistics (%usr, %nice, %sys, %iowait, %idle)
  • %usr - User space CPU usage
  • %nice - Nice priority processes CPU usage
  • %sys - System/kernel space CPU usage
  • %iowait - CPU waiting for I/O operations
  • %idle - CPU idle time

Exporting and formatting data

# Export to CSV format sar -u 1 10 | awk 'NR>3 {print $1","$3","$4","$5","$6","$7}' > cpu_data.csv # Generate HTML report sar -u -f /var/log/sysstat/sa$(date +%d) | awk ' BEGIN {print ""} NR>3 {print ""} END {print "
"$1""$3""$4"
"}' > report.html # JSON format output sar -u 1 3 | awk 'NR>3 {printf "{\"time\":\"%s\",\"user\":%s,\"system\":%s}\n", $1, $3, $5}' # Create graphs with gnuplot sar -u 1 60 | awk 'NR>3 {print NR-3, $3}' | gnuplot -e "plot '-' with lines; pause -1"

Export and format sar data for analysis and reporting

Best Practices

Monitoring Best Practices
  • Use appropriate intervals - shorter for troubleshooting, longer for trends
  • Monitor multiple metrics together for comprehensive analysis
  • Set up automated data collection with sysstat service
  • Archive historical data for long-term trend analysis
  • Create alerts based on threshold values
  • Document baseline performance metrics
Common Issues
  • Missing data files - Ensure sysstat service is running
  • Permission errors - Check access to /var/log/sysstat/
  • High overhead - Avoid very short intervals in production
  • Disk space - Monitor log file sizes and implement rotation

See also