Files

43 lines
2.2 KiB
Bash
Executable File

#!/usr/bin/env bash
# Snapshot phone health: memory, load, crashes/ANRs since boot, low-memory kills, log errors, cold launches.
# Usage: measure.sh OUT_FILE [launch-package ...]
set -uo pipefail
out=$1; shift
a() { adb shell "$@" </dev/null; }
{
echo "# $(date '+%F %T') $(a getprop ro.build.display.id) / Android $(a getprop ro.build.version.release)"
echo "## system"
a 'uptime; cat /proc/loadavg'
a 'grep -E "MemTotal|MemAvailable|Cached:|SwapTotal|SwapFree" /proc/meminfo'
a 'su -c "cat /proc/sys/vm/swappiness; cat /sys/block/zram0/mm_stat 2>/dev/null"'
echo "procs: $(a 'ls -d /proc/[0-9]* | wc -l')"
echo "## top cpu"
a 'top -b -n 1 -m 12 -o PID,USER,%CPU,%MEM,NAME' | tail -13
echo "## dropbox since boot"
boot=$(a 'date -d @$(( $(date +%s) - $(cut -d. -f1 /proc/uptime) )) "+%Y-%m-%d %H:%M:%S"')
a "dumpsys dropbox" | awk -v b="$boot" '$1" "$2 >= b && $3 ~ /anr|crash|watchdog|tombstone|wtf|lowmem|native/ {print $3}' | sort | uniq -c
echo "## crash buffer (FATAL / ANR per process)"
a 'logcat -d -b crash' | grep -oE "Process: [^,]+|FATAL EXCEPTION|>>> [^ ]+ <<<" | sort | uniq -c | sort -rn | head -20
a 'logcat -d -b events' | grep -oE "am_anr: \[[^]]*" | awk -F, '{print "ANR " $3}' | sort | uniq -c
echo "## lmkd / am_kill"
a 'logcat -d -b events' | grep -cE "am_kill|lmk_kill" | sed 's/^/kills: /'
a 'logcat -d -b events' | grep -oE "am_kill: \[[^]]*" | awk -F, '{print $5}' | sort | uniq -c | sort -rn | head -10
echo "## logcat error tags (top 25)"
a 'logcat -d *:E' | awk '{print $6}' | sort | uniq -c | sort -rn | head -25
echo "## thermal / battery"
a 'dumpsys battery | grep -E "level|temperature|status"; for z in /sys/class/thermal/thermal_zone*; do echo "$(cat $z/type) $(cat $z/temp)"; done 2>/dev/null | sort -k2 -n | tail -5'
if [ $# -gt 0 ]; then
echo "## cold launches (ms, am start -W -S, 3 runs)"
for p in "$@"; do
t=""
for _ in 1 2 3; do
act=$(a "cmd package resolve-activity --brief -c android.intent.category.LAUNCHER $p" | tr -d '\r' | tail -1)
v=$(a "am start -W -S -a android.intent.action.MAIN -c android.intent.category.LAUNCHER -n '$act'" | awk '/TotalTime/{print $2}')
t="$t ${v:-fail}"; a 'input keyevent KEYCODE_HOME'; sleep 2
done
echo "$p:$t"
done
fi
} 2>&1 | tee "$out"