maybe fixed cpu fork logging

This commit is contained in:
2026-05-22 20:54:12 +03:00
parent a0410d4fbb
commit 835d3dc4b4
+14 -4
View File
@@ -39,6 +39,13 @@ sample_process_csv() {
local start_uptime="$3" local start_uptime="$3"
local max_seconds="$4" local max_seconds="$4"
local have_pidstat=0
if command -v pidstat >/dev/null 2>&1; then
have_pidstat=1
else
log "pidstat not found; install sysstat for accurate CPU sampling"
fi
while kill -0 "$pid" 2>/dev/null; do while kill -0 "$pid" 2>/dev/null; do
local now_uptime elapsed_s local now_uptime elapsed_s
now_uptime=$(awk '{print $1}' /proc/uptime) now_uptime=$(awk '{print $1}' /proc/uptime)
@@ -65,7 +72,7 @@ sample_process_csv() {
proc_count=$(count_processes || echo 0) proc_count=$(count_processes || echo 0)
thread_total=$(count_threads_total || echo 0) thread_total=$(count_threads_total || echo 0)
# Use ps directly to avoid zero deltas for very short-lived processes. # Use pidstat for CPU and ps for memory/thread metrics.
local cpu rss vsz nlwp local cpu rss vsz nlwp
if command -v ps >/dev/null 2>&1; then if command -v ps >/dev/null 2>&1; then
read -r cpu rss vsz nlwp < <(ps -o %cpu=,rss=,vsz=,nlwp= -p "$pid" 2>/dev/null || echo "0 0 0 0") read -r cpu rss vsz nlwp < <(ps -o %cpu=,rss=,vsz=,nlwp= -p "$pid" 2>/dev/null || echo "0 0 0 0")
@@ -73,14 +80,17 @@ sample_process_csv() {
rss=${rss:-0} rss=${rss:-0}
vsz=${vsz:-0} vsz=${vsz:-0}
nlwp=${nlwp:-0} nlwp=${nlwp:-0}
# Some busybox builds scale %CPU by 100.
cpu=$(awk -v c="$cpu" 'BEGIN{ if (c>1000) printf "%.2f", c/100; else printf "%.2f", c }')
else else
cpu=0.00
rss=0 rss=0
vsz=0 vsz=0
nlwp=0 nlwp=0
fi fi
if [ "$have_pidstat" -eq 1 ]; then
cpu=$(pidstat -p "$pid" 1 1 2>/dev/null | awk -v p="$pid" '$1 ~ /^[0-9]/ && $3==p {print $8; exit}')
cpu=${cpu:-0.00}
else
cpu=0.00
fi
local stk=0 heap=0 local stk=0 heap=0
printf "%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s\n" \ printf "%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s\n" \