6.1 Load Average (+ Uptime & Logical CPUs)
6.2 CPU Usage (mpstat -P ALL)
6.3 CPU Information / Frequency (+ scaling & governors)
6.4 CPU Pressure (PSI metrics)
6.5 Memory Usage (+ Detailed /proc/meminfo)
6.6 Memory Pressure (PSI metrics)
6.7 Swap Activity (swapon devices & si/so counters)
6.8 Disk I/O (iostat or /proc/diskstats)
6.9 I/O Pressure (PSI metrics)
6.10 Top CPU Processes (ps hogs)
6.11 Top Memory Processes (ps rss/vsz hogs)
6.12 Process States (Aggregated summary, D-state & Zombie hunts)
6.13 Run Queue / Blocked Processes (vmstat runnable/blocked)
6.14 Context Switches / Process Creation (/proc/stat keys)
6.15 Interrupts / SoftIRQs (Hardware/Software IRQs summary)
6.16 Network Throughput (sar or /proc/net/dev counters)
6.17 Network Errors / Drops (Interface counters loop)
Copy–>Past
echo "==================== 06. PERFORMANCE ASSESSMENT ===================="; printf "\n"; echo "6.1 LOAD AVERAGE"; echo "--- Uptime / Load Average ---"; uptime 2>/dev/null || cat /proc/loadavg; printf "\n"; echo "--- Load Details ---"; cat /proc/loadavg 2>/dev/null || echo "/proc/loadavg unavailable"; printf "\n"; echo "--- Logical CPUs ---"; nproc 2>/dev/null || grep -c '^processor' /proc/cpuinfo 2>/dev/null; printf "\n%.0s" {1..3}; echo "6.2 CPU USAGE"; if command -v mpstat >/dev/null 2>&1; then mpstat -P ALL 1 2 2>/dev/null; else echo "mpstat not installed. Using vmstat fallback:"; vmstat 1 2 2>/dev/null; fi; printf "\n%.0s" {1..3}; echo "6.3 CPU INFORMATION / FREQUENCY"; lscpu 2>/dev/null | grep -E 'Architecture|CPU\(s\)|On-line CPU|Thread|Core|Socket|Model name|CPU MHz|CPU max MHz|CPU min MHz|NUMA|Hypervisor|Virtualization' || echo "CPU information unavailable"; printf "\n"; echo "--- CPU Frequency Scaling ---"; if command -v cpupower >/dev/null 2>&1; then cpupower frequency-info 2>/dev/null | head -40; elif [ -d /sys/devices/system/cpu/cpu0/cpufreq ]; then grep -H . /sys/devices/system/cpu/cpu0/cpufreq/scaling_cur_freq /sys/devices/system/cpu/cpu0/cpufreq/scaling_min_freq /sys/devices/system/cpu/cpu0/cpufreq/scaling_max_freq /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor 2>/dev/null; else echo "CPU frequency scaling information unavailable"; fi; printf "\n%.0s" {1..3}; echo "6.4 CPU PRESSURE"; if [ -f /proc/pressure/cpu ]; then cat /proc/pressure/cpu; else echo "CPU Pressure Stall Information is unavailable"; fi; printf "\n%.0s" {1..3}; echo "6.5 MEMORY USAGE"; free -h; printf "\n"; echo "--- Key Memory Metrics ---"; grep -E 'MemTotal|MemFree|MemAvailable|Buffers|Cached|SwapCached|Active:|Inactive:|Dirty:|Writeback:|AnonPages|Slab:|SReclaimable|PageTables|Committed_AS|CommitLimit|HugePages_Total|HugePages_Free' /proc/meminfo 2>/dev/null || echo "Detailed memory information unavailable"; printf "\n%.0s" {1..3}; echo "6.6 MEMORY PRESSURE"; if [ -f /proc/pressure/memory ]; then cat /proc/pressure/memory; else echo "Memory Pressure Stall Information is unavailable"; fi; printf "\n%.0s" {1..3}; echo "6.7 SWAP ACTIVITY"; echo "--- Active Swap Devices ---"; swapon --show --output=NAME,TYPE,SIZE,USED,PRIO 2>/dev/null || cat /proc/swaps 2>/dev/null || echo "Swap information unavailable"; printf "\n"; echo "--- Live Swap Activity ---"; echo "Watch columns: si = swap-in, so = swap-out"; vmstat 1 3 2>/dev/null || echo "vmstat unavailable"; printf "\n%.0s" {1..3}; echo "6.8 DISK I/O"; if command -v iostat >/dev/null 2>&1; then iostat -xz 1 2 2>/dev/null; else echo "iostat not installed. Raw /proc/diskstats output:"; head -30 /proc/diskstats 2>/dev/null || echo "/proc/diskstats unavailable"; fi; printf "\n%.0s" {1..3}; echo "6.9 I/O PRESSURE"; if [ -f /proc/pressure/io ]; then cat /proc/pressure/io; else echo "I/O Pressure Stall Information is unavailable"; fi; printf "\n%.0s" {1..3}; echo "6.10 TOP CPU PROCESSES"; ps -eo pid,ppid,user,%cpu,%mem,stat,etime,cmd --sort=-%cpu 2>/dev/null | head -16 || echo "Process listing unavailable"; printf "\n%.0s" {1..3}; echo "6.11 TOP MEMORY PROCESSES"; ps -eo pid,ppid,user,%mem,%cpu,rss,vsz,stat,etime,cmd --sort=-%mem 2>/dev/null | head -16 || echo "Process listing unavailable"; printf "\n%.0s" {1..3}; echo "6.12 PROCESS STATES"; echo "--- Process State Summary ---"; ps -eo stat= 2>/dev/null | cut -c1 | sort | uniq -c | sort -nr || echo "Process state summary unavailable"; printf "\n"; echo "--- Uninterruptible Sleep (D State) ---"; ps -eo pid,ppid,user,stat,wchan:32,cmd 2>/dev/null | awk '$4 ~ /^D/ {print}' || echo "Unable to inspect D-state processes"; D_STATE_COUNT=$(ps -eo stat= 2>/dev/null | awk '$1 ~ /^D/ {count++} END {print count+0}'); [ "${D_STATE_COUNT:-0}" -eq 0 ] && echo "No processes in D state"; printf "\n"; echo "--- Zombies (Z State) ---"; ps -eo pid,ppid,user,stat,etime,cmd 2>/dev/null | awk '$4 ~ /^Z/ {print}' || echo "Unable to inspect zombie processes"; ZOMBIE_COUNT=$(ps -eo stat= 2>/dev/null | awk '$1 ~ /^Z/ {count++} END {print count+0}'); [ "${ZOMBIE_COUNT:-0}" -eq 0 ] && echo "No zombie processes"; printf "\n%.0s" {1..3}; echo "6.13 RUN QUEUE / BLOCKED PROCESSES"; echo "Watch columns: r = runnable, b = blocked, wa = I/O wait"; vmstat 1 3 2>/dev/null || echo "vmstat unavailable"; printf "\n%.0s" {1..3}; echo "6.14 CONTEXT SWITCHES / PROCESS CREATION"; grep -E '^(ctxt|processes|procs_running|procs_blocked)' /proc/stat 2>/dev/null || echo "Context-switch information unavailable"; printf "\n%.0s" {1..3}; echo "6.15 INTERRUPTS / SOFTIRQS"; echo "--- Hardware Interrupts ---"; head -25 /proc/interrupts 2>/dev/null || echo "/proc/interrupts unavailable or access restricted"; printf "\n"; echo "--- Software Interrupts ---"; head -25 /proc/softirqs 2>/dev/null || echo "/proc/softirqs unavailable or access restricted"; printf "\n%.0s" {1..3}; echo "6.16 NETWORK THROUGHPUT"; if command -v sar >/dev/null 2>&1; then sar -n DEV 1 2 2>/dev/null; else echo "sar not installed. Current interface counters:"; cat /proc/net/dev 2>/dev/null | head -25 || echo "Network counters unavailable"; fi; printf "\n%.0s" {1..3}; echo "6.17 NETWORK ERRORS / DROPS"; for IF in /sys/class/net/*; do IF=$(basename "$IF"); [ "$IF" = "lo" ] && continue; [ ! -d "/sys/class/net/$IF/statistics" ] && continue; printf "%-14s RX_ERR:%-10s RX_DROP:%-10s TX_ERR:%-10s TX_DROP:%-10s\n" "$IF" "$(cat "/sys/class/net/$IF/statistics/rx_errors")" "$(cat "/sys/class/net/$IF/statistics/rx_dropped")" "$(cat "/sys/class/net/$IF/statistics/tx_errors")" "$(cat "/sys/class/net/$IF/statistics/tx_dropped")"; done
# ==================== 06. PERFORMANCE ASSESSMENT ====================
echo "==================== 06. PERFORMANCE ASSESSMENT ===================="
printf "\n"
# --- 6.1 LOAD AVERAGE ---
echo "6.1 LOAD AVERAGE"
echo "--- Uptime / Load Average ---"
uptime 2>/dev/null || cat /proc/loadavg
printf "\n"
echo "--- Load Details ---"
cat /proc/loadavg 2>/dev/null || echo "/proc/loadavg unavailable"
printf "\n"
echo "--- Logical CPUs ---"
nproc 2>/dev/null || grep -c '^processor' /proc/cpuinfo 2>/dev/null
printf "\n%.0s" {1..3}
# --- 6.2 CPU USAGE ---
echo "6.2 CPU USAGE"
if command -v mpstat >/dev/null 2>&1; then
mpstat -P ALL 1 2 2>/dev/null
else
echo "mpstat not installed. Using vmstat fallback:"
vmstat 1 2 2>/dev/null
fi
printf "\n%.0s" {1..3}
# --- 6.3 CPU INFORMATION / FREQUENCY ---
echo "6.3 CPU INFORMATION / FREQUENCY"
lscpu 2>/dev/null | grep -E 'Architecture|CPU\(s\)|On-line CPU|Thread|Core|Socket|Model name|CPU MHz|CPU max MHz|CPU min MHz|NUMA|Hypervisor|Virtualization' || echo "CPU information unavailable"
printf "\n"
echo "--- CPU Frequency Scaling ---"
if command -v cpupower >/dev/null 2>&1; then
cpupower frequency-info 2>/dev/null | head -40
elif [ -d /sys/devices/system/cpu/cpu0/cpufreq ]; then
grep -H . /sys/devices/system/cpu/cpu0/cpufreq/scaling_cur_freq /sys/devices/system/cpu/cpu0/cpufreq/scaling_min_freq /sys/devices/system/cpu/cpu0/cpufreq/scaling_max_freq /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor 2>/dev/null
else
echo "CPU frequency scaling information unavailable"
fi
printf "\n%.0s" {1..3}
# --- 6.4 CPU PRESSURE ---
echo "6.4 CPU PRESSURE"
if [ -f /proc/pressure/cpu ]; then
cat /proc/pressure/cpu
else
echo "CPU Pressure Stall Information is unavailable"
fi
printf "\n%.0s" {1..3}
# --- 6.5 MEMORY USAGE ---
echo "6.5 MEMORY USAGE"
free -h
printf "\n"
echo "--- Key Memory Metrics ---"
grep -E 'MemTotal|MemFree|MemAvailable|Buffers|Cached|SwapCached|Active:|Inactive:|Dirty:|Writeback:|AnonPages|Slab:|SReclaimable|PageTables|Committed_AS|CommitLimit|HugePages_Total|HugePages_Free' /proc/meminfo 2>/dev/null || echo "Detailed memory information unavailable"
printf "\n%.0s" {1..3}
# --- 6.6 MEMORY PRESSURE ---
echo "6.6 MEMORY PRESSURE"
if [ -f /proc/pressure/memory ]; then
cat /proc/pressure/memory
else
echo "Memory Pressure Stall Information is unavailable"
fi
printf "\n%.0s" {1..3}
# --- 6.7 SWAP ACTIVITY ---
echo "6.7 SWAP ACTIVITY"
echo "--- Active Swap Devices ---"
swapon --show --output=NAME,TYPE,SIZE,USED,PRIO 2>/dev/null || cat /proc/swaps 2>/dev/null || echo "Swap information unavailable"
printf "\n"
echo "--- Live Swap Activity ---"
echo "Watch columns: si = swap-in, so = swap-out"
vmstat 1 3 2>/dev/null || echo "vmstat unavailable"
printf "\n%.0s" {1..3}
# --- 6.8 DISK I/O ---
echo "6.8 DISK I/O"
if command -v iostat >/dev/null 2>&1; then
iostat -xz 1 2 2>/dev/null
else
echo "iostat not installed. Raw /proc/diskstats output:"
head -30 /proc/diskstats 2>/dev/null || echo "/proc/diskstats unavailable"
fi
printf "\n%.0s" {1..3}
# --- 6.9 I/O PRESSURE ---
echo "6.9 I/O PRESSURE"
if [ -f /proc/pressure/io ]; then
cat /proc/pressure/io
else
echo "I/O Pressure Stall Information is unavailable"
fi
printf "\n%.0s" {1..3}
# --- 6.10 TOP CPU PROCESSES ---
echo "6.10 TOP CPU PROCESSES"
ps -eo pid,ppid,user,%cpu,%mem,stat,etime,cmd --sort=-%cpu 2>/dev/null | head -16 || echo "Process listing unavailable"
printf "\n%.0s" {1..3}
# --- 6.11 TOP MEMORY PROCESSES ---
echo "6.11 TOP MEMORY PROCESSES"
ps -eo pid,ppid,user,%mem,%cpu,rss,vsz,stat,etime,cmd --sort=-%mem 2>/dev/null | head -16 || echo "Process listing unavailable"
printf "\n%.0s" {1..3}
# --- 6.12 PROCESS STATES ---
echo "6.12 PROCESS STATES"
echo "--- Process State Summary ---"
ps -eo stat= 2>/dev/null | cut -c1 | sort | uniq -c | sort -nr || echo "Process state summary unavailable"
printf "\n"
echo "--- Uninterruptible Sleep (D State) ---"
ps -eo pid,ppid,user,stat,wchan:32,cmd 2>/dev/null | awk '$4 ~ /^D/ {print}' || echo "Unable to inspect D-state processes"
D_STATE_COUNT=$(ps -eo stat= 2>/dev/null | awk '$1 ~ /^D/ {count++} END {print count+0}')
[ "${D_STATE_COUNT:-0}" -eq 0 ] && echo "No processes in D state"
printf "\n"
echo "--- Zombies (Z State) ---"
ps -eo pid,ppid,user,stat,etime,cmd 2>/dev/null | awk '$4 ~ /^Z/ {print}' || echo "Unable to inspect zombie processes"
ZOMBIE_COUNT=$(ps -eo stat= 2>/dev/null | awk '$1 ~ /^Z/ {count++} END {print count+0}')
[ "${ZOMBIE_COUNT:-0}" -eq 0 ] && echo "No zombie processes"
printf "\n%.0s" {1..3}
# --- 6.13 RUN QUEUE / BLOCKED PROCESSES ---
echo "6.13 RUN QUEUE / BLOCKED PROCESSES"
echo "Watch columns: r = runnable, b = blocked, wa = I/O wait"
vmstat 1 3 2>/dev/null || echo "vmstat unavailable"
printf "\n%.0s" {1..3}
# --- 6.14 CONTEXT SWITCHES / PROCESS CREATION ---
echo "6.14 CONTEXT SWITCHES / PROCESS CREATION"
grep -E '^(ctxt|processes|procs_running|procs_blocked)' /proc/stat 2>/dev/null || echo "Context-switch information unavailable"
printf "\n%.0s" {1..3}
# --- 6.15 INTERRUPTS / SOFTIRQS ---
echo "6.15 INTERRUPTS / SOFTIRQS"
echo "--- Hardware Interrupts ---"
head -25 /proc/interrupts 2>/dev/null || echo "/proc/interrupts unavailable or access restricted"
printf "\n"
echo "--- Software Interrupts ---"
head -25 /proc/softirqs 2>/dev/null || echo "/proc/softirqs unavailable or access restricted"
printf "\n%.0s" {1..3}
# --- 6.16 NETWORK THROUGHPUT ---
echo "6.16 NETWORK THROUGHPUT"
if command -v sar >/dev/null 2>&1; then
sar -n DEV 1 2 2>/dev/null
else
echo "sar not installed. Current interface counters:"
cat /proc/net/dev 2>/dev/null | head -25 || echo "Network counters unavailable"
fi
printf "\n%.0s" {1..3}
# --- 6.17 NETWORK ERRORS / DROPS ---
echo "6.17 NETWORK ERRORS / DROPS"
for IF in /sys/class/net/*; do
IF=$(basename "$IF")
[ "$IF" = "lo" ] && continue
[ ! -d "/sys/class/net/$IF/statistics" ] && continue
printf "%-14s RX_ERR:%-10s RX_DROP:%-10s TX_ERR:%-10s TX_DROP:%-10s\n" \
"$IF" \
"$(cat "/sys/class/net/$IF/statistics/rx_errors")" \
"$(cat "/sys/class/net/$IF/statistics/rx_dropped")" \
"$(cat "/sys/class/net/$IF/statistics/tx_errors")" \
"$(cat "/sys/class/net/$IF/statistics/tx_dropped")"
done






