feat: heavy_run.sh 重型任务受控运行器(防资源事故)
- flock单重型任务锁(同时只许一个) - nice19+ionice最低档(让位生产服务) - systemd-run MemoryMax6G/CPUQuota150%(防单进程吃光) - load1>4拒绝启动(负载预检) 铁律: 246是生产命脉, 研究型重负载必须经此脚本运行
This commit is contained in:
Executable
+32
@@ -0,0 +1,32 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
# heavy_run.sh — 研究型重负载受控运行器(2026-08-05 进程堆积/资源事故后立)
|
||||||
|
#
|
||||||
|
# 铁律:246 是生产命脉(frp/gitea/agentsmeeting/MoFin 都在上面)。
|
||||||
|
# 一切研究型重负载(全市场回测/批量采集/大规模分析)必须通过本脚本运行:
|
||||||
|
# 1. flock 单重型任务锁 —— 同时只许一个重型任务存在
|
||||||
|
# 2. nice -19 + ionice 最低档 —— CPU/IO 让位于生产服务
|
||||||
|
# 3. systemd-run 内存/CPU 配额 —— MemoryMax 6G / CPUQuota 150%(防单进程吃光资源)
|
||||||
|
# 4. 负载预检 —— load1 > 4 时拒绝启动(等闲了再说)
|
||||||
|
#
|
||||||
|
# 用法: nohup /home/hmo/MoFin/deploy/profile-scripts/heavy_run.sh /usr/bin/python3 /tmp/xxx.py > /tmp/xxx.log 2>&1 &
|
||||||
|
LOCK=/tmp/heavy_run.lock
|
||||||
|
LOAD_LIMIT=4
|
||||||
|
|
||||||
|
load1=$(awk '{print $1}' /proc/loadavg)
|
||||||
|
if awk -v l="$load1" -v lim="$LOAD_LIMIT" 'BEGIN{exit !(l>lim)}'; then
|
||||||
|
echo "[heavy_run] 当前负载 $load1 > $LOAD_LIMIT,拒绝启动重型任务(先等服务器闲下来)" >&2
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
exec 9>"$LOCK"
|
||||||
|
if ! flock -n 9; then
|
||||||
|
pid=$(fuser "$LOCK" 2>/dev/null)
|
||||||
|
echo "[heavy_run] 已有重型任务在跑(lock: $LOCK),拒绝并发启动" >&2
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "[heavy_run] 受控启动: $* (nice19/ionice低/MemoryMax6G/CPUQuota150%)" >&2
|
||||||
|
systemd-run --scope --quiet -p MemoryMax=6G -p CPUQuota=150% --nice=19 ionice -c2 -n7 "$@"
|
||||||
|
rc=$?
|
||||||
|
echo "[heavy_run] 任务结束 rc=$rc" >&2
|
||||||
|
exit $rc
|
||||||
Reference in New Issue
Block a user