danielrosehill's picture
commit
279efce
# Monitor System Resources
You are helping the user monitor live system resource usage (CPU, RAM, disk I/O, network).
## Task
1. **Quick resource overview:**
```bash
# System overview
top -b -n 1 | head -20
# Better overview with htop (if installed)
htop
# Modern alternative: btop
btop
```
2. **CPU monitoring:**
```bash
# CPU usage summary
mpstat 1 5 # 5 samples, 1 second interval
# Per-core usage
mpstat -P ALL 1 5
# Top CPU consumers
ps aux --sort=-%cpu | head -10
# CPU frequency and temperature
watch -n 1 "grep MHz /proc/cpuinfo | head -20 && sensors"
```
3. **Memory monitoring:**
```bash
# Memory usage
free -h
# Detailed memory info
cat /proc/meminfo
# Top memory consumers
ps aux --sort=-%mem | head -10
# Memory usage by process
smem -tk # If smem is installed
# Watch memory usage
watch -n 1 free -h
```
4. **Disk I/O monitoring:**
```bash
# I/O statistics
iostat -x 1 5
# Disk usage by device
iotop -o # Only show active I/O
# Per-process I/O
iotop -P
# Watch disk I/O
watch -n 1 "iostat -x | grep -E 'Device|sd|nvme'"
```
5. **Network monitoring:**
```bash
# Network interface statistics
ifstat 1 5
# Bandwidth per interface
bmon
# Network speed
iftop
# Connection summary
ss -s
# Active connections
nethogs
```
6. **Combined system monitoring:**
```bash
# All-in-one monitoring
glances
# Custom dashboard
watch -n 1 '
echo "=== CPU ==="
top -b -n 1 | head -5 | tail -2
echo ""
echo "=== Memory ==="
free -h | grep -E "Mem|Swap"
echo ""
echo "=== Disk I/O ==="
iostat -x 1 1 | grep -E "Device|sd|nvme" | head -5
echo ""
echo "=== Network ==="
ifstat 1 1 | tail -1
'
```
7. **GPU monitoring (AMD):**
```bash
# AMD GPU usage
radeontop
# GPU sensors
watch -n 1 "rocm-smi"
# Detailed GPU info
watch -n 1 "rocm-smi --showuse --showmemuse --showtemp"
```
8. **Process tree with resource usage:**
```bash
# Process tree
pstree -p
# Resource-aware process tree
ps auxf
# Find resource hogs
ps -eo pid,ppid,cmd,%mem,%cpu --sort=-%cpu | head -20
```
9. **System load monitoring:**
```bash
# Load average
uptime
# Load over time
watch -n 1 "uptime && cat /proc/loadavg"
# Who's causing load
tload -d 1
```
10. **Create monitoring script:**
```bash
cat > /tmp/system-monitor.sh << 'EOF'
#!/bin/bash
echo "System Resource Monitor - $(date)"
echo "========================================"
echo ""
echo "CPU Usage:"
mpstat 1 1 | tail -1
echo ""
echo "Memory:"
free -h | grep -E "Mem|Swap"
echo ""
echo "Load Average:"
uptime
echo ""
echo "Top 5 CPU Processes:"
ps aux --sort=-%cpu | head -6 | tail -5
echo ""
echo "Top 5 Memory Processes:"
ps aux --sort=-%mem | head -6 | tail -5
echo ""
echo "Disk Usage:"
df -h / /home
echo ""
echo "Disk I/O:"
iostat -x 1 1 | grep -E "sd|nvme"
EOF
chmod +x /tmp/system-monitor.sh
/tmp/system-monitor.sh
```
## Present Summary to User
Provide snapshot of:
- **CPU:** Usage %, load average, top processes
- **Memory:** Used/Free, swap usage, top consumers
- **Disk:** Usage %, I/O wait, active reads/writes
- **Network:** Bandwidth usage, active connections
- **GPU:** Usage % (if applicable)
Flag any concerning patterns:
- High CPU usage (>80% sustained)
- Low memory (<10% free)
- High swap usage
- Disk I/O bottlenecks
- Network saturation
## Install Monitoring Tools if Needed
```bash
# Install commonly needed tools
sudo apt install -y \
htop \
btop \
iotop \
iftop \
nethogs \
glances \
sysstat \
bmon \
radeontop
```
## Troubleshooting High Usage
**High CPU:**
- Identify process: `top` or `htop`
- Check if legitimate (updates, backups, encoding)
- Kill if necessary: `kill -15 PID`
**High Memory:**
- Check for memory leaks: `ps aux --sort=-%mem`
- Clear caches: `sudo sync && sudo sysctl -w vm.drop_caches=3`
- Check for swap thrashing
**High Disk I/O:**
- Identify process: `iotop -o`
- Check if expected (backups, indexing, updates)
- Monitor disk health: `/check-disk-errors`
**High Network:**
- Identify connections: `nethogs` or `iftop`
- Check for unexpected traffic
- Use `ss -tunap` to see connections
## Notes
- Most monitoring tools require sudo for full functionality
- `glances` provides best all-in-one view
- `btop` is modern, colorful alternative to `htop`
- Some tools need to be installed separately
- For persistent monitoring, consider setting up Prometheus/Grafana
- Check `systemd-cgtop` for cgroup resource usage