| # Diagnose System Slowdown |
|
|
| You are helping the user diagnose system laginess and performance issues. |
|
|
| ## Your tasks: |
|
|
| 1. **Gather initial information:** |
| Ask the user: |
| - When did the slowdown start? |
| - Is it constant or intermittent? |
| - What activities trigger it? (startup, specific applications, general use) |
| - Any recent changes? (updates, new software, configuration changes) |
|
|
| 2. **Check current system load:** |
| - System load averages: `uptime` |
| - Detailed load info: `w` |
| - Number of processes: `ps aux | wc -l` |
|
|
| 3. **CPU analysis:** |
| - Real-time CPU usage: `top -b -n 1 | head -20` |
| - Per-core CPU usage: `mpstat -P ALL 1 1` (if sysstat installed) |
| - Top CPU consumers: `ps aux --sort=-%cpu | head -20` |
| - CPU frequency and throttling: |
| ```bash |
| cat /proc/cpuinfo | grep MHz |
| sudo cpupower frequency-info # if available |
| ``` |
| - Check for thermal throttling: |
| ```bash |
| sensors # if lm-sensors installed |
| cat /sys/class/thermal/thermal_zone*/temp |
| ``` |
| |
| 4. **Memory analysis:** |
| - Memory usage: `free -h` |
| - Detailed memory info: `cat /proc/meminfo` |
| - Swap usage: `swapon --show` |
| - Top memory consumers: `ps aux --sort=-%mem | head -20` |
| - Check for memory leaks or runaway processes |
| - OOM (Out of Memory) events: `sudo journalctl -k | grep -i "out of memory"` |
|
|
| 5. **Disk I/O analysis:** |
| - Disk usage: `df -h` |
| - Inode usage: `df -i` |
| - I/O statistics: `iostat -x 1 5` (if sysstat installed) |
| - Top I/O processes: `sudo iotop -b -n 1 | head -20` (if iotop installed) |
| - Check for high disk wait: `top` and look at `wa` (wait) percentage |
| - Disk health: `sudo smartctl -H /dev/sda` (for each drive) |
|
|
| 6. **Process analysis:** |
| - List all running processes: `ps aux` |
| - Process tree: `pstree -p` |
| - Zombie processes: `ps aux | grep Z` |
| - Processes in D state (uninterruptible sleep): `ps aux | grep " D "` |
| - Long-running processes: `ps -eo pid,user,start,time,cmd --sort=-time | head -20` |
|
|
| 7. **Check for system resource contention:** |
| - Context switches: `vmstat 1 5` |
| - Interrupts: `cat /proc/interrupts` |
| - Check if system is swapping heavily: `vmstat 1 5` (look at si/so columns) |
|
|
| 8. **Network issues (can cause perceived slowness):** |
| - Network connections: `ss -s` |
| - Active connections: `netstat -tunap | wc -l` or `ss -tunap | wc -l` |
| - DNS resolution test: `time nslookup google.com` |
| - Check for network errors: `ip -s link` |
|
|
| 9. **Graphics/Desktop environment (for GUI slowness):** |
| - Check X server or Wayland compositor CPU usage |
| - GPU usage (if nvidia): `nvidia-smi` or `watch -n 1 nvidia-smi` |
| - For AMD: `radeontop` (if installed) |
| - Check compositor settings (KDE Plasma on Wayland) |
| - Desktop effects CPU usage |
|
|
| 10. **Check system logs for errors:** |
| - Recent errors: `sudo journalctl -p err -b` |
| - Kernel messages: `dmesg | tail -50` |
| - System log: `sudo journalctl -xe --no-pager | tail -100` |
| - Look for specific issues: |
| - Hardware errors |
| - Driver issues |
| - Service failures |
| - Filesystem errors |
|
|
| 11. **Check for background services/processes:** |
| - List all services: `systemctl list-units --type=service --state=running` |
| - Failed services: `systemctl --failed` |
| - Check for update managers, indexing services (updatedb, baloo, tracker) |
| - Snap services: `snap list` and check for snap updates |
| - Flatpak: `flatpak list` |
|
|
| 12. **Application-specific checks:** |
| If slowness is application-specific: |
| - Browser: check extensions, tabs, cache size |
| - Database: check for long-running queries |
| - IDE: check for indexing, plugins |
| - Check application logs: `~/.local/share/applications/` or specific app log locations |
| |
| 13. **Historical data (if available):** |
| - Check sar data: `sar -u` (if sysstat/sar configured) |
| - Check historical logs: `sudo journalctl --since "1 day ago" -p err` |
|
|
| 14. **Analyze and report findings:** |
| Categorize issues found: |
| - **CPU bottleneck**: High CPU usage, identify culprit processes |
| - **Memory bottleneck**: High memory usage, swapping, suggest adding RAM or killing processes |
| - **Disk I/O bottleneck**: High wait times, slow disk, suggest SSD upgrade or I/O optimization |
| - **Thermal throttling**: High temperatures causing CPU slowdown |
| - **Runaway processes**: Specific process consuming excessive resources |
| - **Resource leaks**: Memory or handle leaks in specific applications |
| - **Background tasks**: Indexing, updates, backups running |
| - **Network issues**: DNS problems, slow network affecting system |
| |
| 15. **Provide recommendations:** |
| Based on findings, suggest: |
| - Kill or restart specific problematic processes |
| - Disable unnecessary services |
| - Adjust swappiness: `sudo sysctl vm.swappiness=10` |
| - Clean up disk space if low |
| - Update or reinstall problematic drivers |
| - Install missing performance tools (sysstat, iotop, htop) |
| - Schedule resource-intensive tasks for off-hours |
| - Hardware upgrades (RAM, SSD) if appropriate |
| - Investigate and fix application-specific issues |
| - Check for and apply system updates |
| - Reboot if system has been up for extended period with memory leaks |
| |
| ## Important notes: |
| - Install missing diagnostic tools if needed (sysstat, iotop, htop, lm-sensors) |
| - Use sudo for system-level diagnostics |
| - Be systematic - check CPU, memory, disk, and network in order |
| - Correlate findings with user's description of when slowness occurs |
| - Don't immediately kill processes - confirm with user first |
| - Consider both hardware and software causes |
|
|