maybe fixed cpu fork logging
This commit is contained in:
+22
-26
@@ -14,13 +14,19 @@ log() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
count_processes() {
|
count_processes() {
|
||||||
# Avoid find -regex portability issues (busybox) by using globbing on /proc.
|
if command -v ps >/dev/null 2>&1; then
|
||||||
ls -d /proc/[0-9]* 2>/dev/null | wc -l
|
ps -e -o pid= 2>/dev/null | wc -l
|
||||||
|
else
|
||||||
|
echo 0
|
||||||
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
count_threads_total() {
|
count_threads_total() {
|
||||||
# Sum Threads: from all /proc/<pid>/status entries.
|
if command -v ps >/dev/null 2>&1; then
|
||||||
awk '/^Threads:/ {sum+=$2} END {print sum+0}' /proc/[0-9]*/status 2>/dev/null || echo 0
|
ps -e -o nlwp= 2>/dev/null | awk '{sum+=$1} END {print sum+0}'
|
||||||
|
else
|
||||||
|
echo 0
|
||||||
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
get_mem_kb() {
|
get_mem_kb() {
|
||||||
@@ -33,16 +39,6 @@ sample_process_csv() {
|
|||||||
local start_uptime="$3"
|
local start_uptime="$3"
|
||||||
local max_seconds="$4"
|
local max_seconds="$4"
|
||||||
|
|
||||||
local clk_tck
|
|
||||||
clk_tck=$(getconf CLK_TCK)
|
|
||||||
|
|
||||||
local prev_uptime prev_ticks
|
|
||||||
prev_uptime=$(awk '{print $1}' /proc/uptime)
|
|
||||||
prev_ticks=0
|
|
||||||
if [ -r "/proc/$pid/stat" ]; then
|
|
||||||
prev_ticks=$(awk '{print $14 + $15}' "/proc/$pid/stat")
|
|
||||||
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)
|
||||||
@@ -69,22 +65,23 @@ 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)
|
||||||
|
|
||||||
local rss=0 vsz=0 stk=0 heap=0 nlwp=0
|
|
||||||
if [ -r "/proc/$pid/status" ]; then
|
|
||||||
rss=$(awk '/^VmRSS:/ {print $2}' "/proc/$pid/status")
|
|
||||||
vsz=$(awk '/^VmSize:/ {print $2}' "/proc/$pid/status")
|
|
||||||
stk=$(awk '/^VmStk:/ {print $2}' "/proc/$pid/status")
|
|
||||||
heap=$(awk '/^VmData:/ {print $2}' "/proc/$pid/status")
|
|
||||||
nlwp=$(awk '/^Threads:/ {print $2}' "/proc/$pid/status")
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Use ps directly to avoid zero deltas for very short-lived processes.
|
# Use ps directly to avoid zero deltas for very short-lived processes.
|
||||||
local cpu
|
local cpu rss vsz nlwp
|
||||||
if command -v ps >/dev/null 2>&1; then
|
if command -v ps >/dev/null 2>&1; then
|
||||||
cpu=$(ps -o %cpu= -p "$pid" 2>/dev/null | awk '{print $1}' || true)
|
read -r cpu rss vsz nlwp < <(ps -o %cpu=,rss=,vsz=,nlwp= -p "$pid" 2>/dev/null || echo "0 0 0 0")
|
||||||
|
cpu=${cpu:-0}
|
||||||
|
rss=${rss:-0}
|
||||||
|
vsz=${vsz:-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
|
cpu=0.00
|
||||||
|
rss=0
|
||||||
|
vsz=0
|
||||||
|
nlwp=0
|
||||||
fi
|
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" \
|
printf "%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" \
|
"$(date -Iseconds)" "$elapsed_s" "$load1" "$load5" "$load15" \
|
||||||
@@ -92,7 +89,6 @@ sample_process_csv() {
|
|||||||
"$pid" "$cpu" "${rss:-0}" "${vsz:-0}" "${stk:-0}" "${heap:-0}" "${nlwp:-0}" \
|
"$pid" "$cpu" "${rss:-0}" "${vsz:-0}" "${stk:-0}" "${heap:-0}" "${nlwp:-0}" \
|
||||||
>> "$csv"
|
>> "$csv"
|
||||||
|
|
||||||
prev_uptime=$now_uptime
|
|
||||||
sleep 1
|
sleep 1
|
||||||
done
|
done
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user