0813
This commit is contained in:
@@ -1,14 +1,64 @@
|
||||
echo "===TEST:memory==="
|
||||
VM_WORKERS=${AUTOCHECK_THREADS:-4}
|
||||
if [ "$VM_WORKERS" -gt 4 ]; then VM_WORKERS=4; fi
|
||||
|
||||
# 读取温度(sensors 不可用时输出空)
|
||||
read_temp() {
|
||||
sensors 2>/dev/null | grep -oP '\+?\d+(\.\d+)?(?=°C)' | head -1
|
||||
}
|
||||
|
||||
# 后台采样内存使用率 + 温度
|
||||
SAMPLE_LOG=/tmp/auto-check-memory-sample.log
|
||||
: > "$SAMPLE_LOG"
|
||||
(
|
||||
while true; do
|
||||
TS=$(date +%H:%M:%S)
|
||||
MEM_TOTAL=$(awk '/^MemTotal:/{print $2}' /proc/meminfo)
|
||||
MEM_AVAIL=$(awk '/^MemAvailable:/{print $2}' /proc/meminfo)
|
||||
if [ -z "$MEM_AVAIL" ] || [ "$MEM_AVAIL" = "0" ]; then
|
||||
MEM_AVAIL=$(awk '/^MemFree:/{print $2}' /proc/meminfo)
|
||||
fi
|
||||
MEM_PCT=$(awk -v t="$MEM_TOTAL" -v a="$MEM_AVAIL" 'BEGIN{if(t>0) printf "%.1f", (t-a)/t*100}')
|
||||
TEMP=$(read_temp)
|
||||
echo "${TS},${MEM_PCT},${TEMP}" >> "$SAMPLE_LOG"
|
||||
sleep "${AUTOCHECK_SAMPLE_INTERVAL:-2}"
|
||||
done
|
||||
) &
|
||||
SAMPLE_PID=$!
|
||||
|
||||
START_TIME=$(date +%s%N)
|
||||
set +e
|
||||
OUTPUT=$(stress-ng --vm "${VM_WORKERS}" --vm-bytes 256M --vm-method all --timeout "${AUTOCHECK_DURATION:-30}s" --metrics-brief 2>&1)
|
||||
OUTPUT=$(stress-ng --vm "${AUTOCHECK_THREADS:-4}" --vm-bytes "${AUTOCHECK_MEM_MB:-256}M" --vm-method all --timeout "${AUTOCHECK_DURATION:-30}s" --temp-path /tmp --metrics-brief 2>&1)
|
||||
EXIT_CODE=$?
|
||||
set -e
|
||||
END_TIME=$(date +%s%N)
|
||||
|
||||
kill $SAMPLE_PID 2>/dev/null || true
|
||||
wait $SAMPLE_PID 2>/dev/null || true
|
||||
|
||||
DURATION_MS=$(( (END_TIME - START_TIME) / 1000000 ))
|
||||
if [ "$EXIT_CODE" -eq 0 ]; then echo 'status:pass'; else echo 'status:fail'; fi
|
||||
echo "duration:${DURATION_MS}ms"
|
||||
|
||||
# 跑分:各 stressor 的 bogo ops/s 之和
|
||||
SCORE=$(echo "$OUTPUT" | awk '
|
||||
/^stress-ng:/ && ($4=="cpu" || $4=="vm" || $4=="iomix" || $4=="memrate") {
|
||||
v=$(NF-1)+0; if (v>0) s+=v
|
||||
}
|
||||
END { printf "%.1f", s+0 }')
|
||||
echo "score:${SCORE}"
|
||||
|
||||
# 关键指标
|
||||
MAX_MEM=$(awk -F',' '$2!="" && $2+0>m {m=$2} END{printf "%.1f", m+0}' "$SAMPLE_LOG")
|
||||
echo "metric:mem_used_pct=${MAX_MEM}"
|
||||
MAX_TEMP=$(awk -F',' '$3!="" && $3+0>m {m=$3} END{printf "%.1f", m+0}' "$SAMPLE_LOG")
|
||||
HAS_TEMP=$(awk -F',' '$3!="" && $3+0>0{f=1} END{print f+0}' "$SAMPLE_LOG")
|
||||
if [ "$HAS_TEMP" = "1" ]; then echo "metric:max_temp=${MAX_TEMP}"; fi
|
||||
|
||||
echo "output:${OUTPUT}"
|
||||
|
||||
# 采样数据(首行表头)
|
||||
echo "===SAMPLES==="
|
||||
echo "time,mem_used_pct,temp"
|
||||
cat "$SAMPLE_LOG"
|
||||
echo "===END_SAMPLES==="
|
||||
|
||||
echo ''
|
||||
|
||||
Reference in New Issue
Block a user