maybe fixed cpu fork logging
This commit is contained in:
+24
-4
@@ -38,6 +38,14 @@ sample_process_csv() {
|
||||
log "pidstat not found; install sysstat for accurate CPU sampling"
|
||||
fi
|
||||
|
||||
local prev_cpu_total=0
|
||||
local prev_cpu_idle=0
|
||||
if [ -r /proc/stat ]; then
|
||||
read -r _ c_user c_nice c_system c_idle c_iowait c_irq c_softirq c_steal _ _ < /proc/stat
|
||||
prev_cpu_total=$((c_user + c_nice + c_system + c_idle + c_iowait + c_irq + c_softirq + c_steal))
|
||||
prev_cpu_idle=$((c_idle + c_iowait))
|
||||
fi
|
||||
|
||||
while kill -0 "$pid" 2>/dev/null; do
|
||||
local now_uptime elapsed_s
|
||||
now_uptime=$(awk '{print $1}' /proc/uptime)
|
||||
@@ -77,10 +85,22 @@ sample_process_csv() {
|
||||
fi
|
||||
local stk=0 heap=0
|
||||
|
||||
printf "%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s\n" \
|
||||
local sys_cpu_pct=0.00
|
||||
if [ -r /proc/stat ]; then
|
||||
read -r _ c_user c_nice c_system c_idle c_iowait c_irq c_softirq c_steal _ _ < /proc/stat
|
||||
local cpu_total=$((c_user + c_nice + c_system + c_idle + c_iowait + c_irq + c_softirq + c_steal))
|
||||
local cpu_idle=$((c_idle + c_iowait))
|
||||
local dt_total=$((cpu_total - prev_cpu_total))
|
||||
local dt_idle=$((cpu_idle - prev_cpu_idle))
|
||||
sys_cpu_pct=$(awk -v t="$dt_total" -v i="$dt_idle" 'BEGIN{ if (t<=0) printf "0.00"; else printf "%.2f", (100.0*(t-i))/t }')
|
||||
prev_cpu_total=$cpu_total
|
||||
prev_cpu_idle=$cpu_idle
|
||||
fi
|
||||
|
||||
printf "%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s\n" \
|
||||
"$(date -Iseconds)" "$elapsed_s" "$load1" "$load5" "$load15" \
|
||||
"$mem_total" "$mem_avail" "$mem_used" "$proc_count" "$thread_total" \
|
||||
"$pid" "$cpu" "${rss:-0}" "${vsz:-0}" "${stk:-0}" "${heap:-0}" "${nlwp:-0}" \
|
||||
"$pid" "$cpu" "$sys_cpu_pct" "${rss:-0}" "${vsz:-0}" "${stk:-0}" "${heap:-0}" "${nlwp:-0}" \
|
||||
>> "$csv"
|
||||
|
||||
sleep 1
|
||||
@@ -95,7 +115,7 @@ run_with_sampling() {
|
||||
|
||||
log "Starting $name: $cmd"
|
||||
|
||||
echo "timestamp,elapsed_s,load1,load5,load15,mem_total_kb,mem_available_kb,mem_used_kb,proc_count,thread_count_total,pid,cpu_pct,rss_kb,vsz_kb,stack_kb,heap_kb,proc_threads" > "$csv"
|
||||
echo "timestamp,elapsed_s,load1,load5,load15,mem_total_kb,mem_available_kb,mem_used_kb,proc_count,thread_count_total,pid,cpu_pct,sys_cpu_pct,rss_kb,vsz_kb,stack_kb,heap_kb,proc_threads" > "$csv"
|
||||
|
||||
local start_uptime pid
|
||||
start_uptime=$(awk '{print $1}' /proc/uptime)
|
||||
@@ -163,7 +183,7 @@ if [ "$ALLOW_DANGEROUS" -eq 1 ]; then
|
||||
"$FORK_BOMB_SECONDS"
|
||||
else
|
||||
log "Skipping fork_bomb (set ALLOW_DANGEROUS=1 to run)"
|
||||
echo "timestamp,elapsed_s,load1,load5,load15,mem_total_kb,mem_available_kb,mem_used_kb,proc_count,thread_count_total,pid,cpu_pct,rss_kb,vsz_kb,stack_kb,heap_kb,proc_threads" > "$OUT_DIR/fork_bomb.csv"
|
||||
echo "timestamp,elapsed_s,load1,load5,load15,mem_total_kb,mem_available_kb,mem_used_kb,proc_count,thread_count_total,pid,cpu_pct,sys_cpu_pct,rss_kb,vsz_kb,stack_kb,heap_kb,proc_threads" > "$OUT_DIR/fork_bomb.csv"
|
||||
fi
|
||||
|
||||
run_with_sampling \
|
||||
|
||||
Reference in New Issue
Block a user