linux资源占用-lookbusy
·
上级要求服务器的CPU和内存占用率必须达到设置的标准😄。故而找到一个神器lookbusy来满足,可以虚拟产生系统 CPU、内存、磁盘等负载,营造出系统繁忙的假象,完美满足考核要求😁
下载安装lookbusy :https://devin.com/lookbusy/
此脚本可以控制资源占用的时间以及阈值,并且在系统真正繁忙时自动关闭
#!/bin/bash
# --- 用户配置 ---
# lookbusy 的完整路径
LOOKBUSY_CMD="/usr/bin/lookbusy"
# 监控检查周期(秒)
CHECK_INTERVAL=30
# 工作时间窗口
START_HOUR=8
END_HOUR=20
# CPU 控制阈值 (单位: %)
CPU_LOWER_THRESHOLD=30
CPU_UPPER_THRESHOLD=70
CPU_CURVE_PERIOD="12h"
CPU_CURVE_PEAK="6h"
# 内存 控制阈值 (单位: %)
MEM_LOWER_THRESHOLD=60
MEM_TARGET_PERCENT=60
MEM_UPPER_THRESHOLD=80
# 日志和PID文件路径
LOG_FILE="/usr/local/lookbusy/dynamic_busy.log"
PID_FILE="/usr/local/lookbusy/dynamic_lookbusy.pid"
log() {
echo "$(date '+%Y-%m-%d %H:%M:%S') - $1" >> "$LOG_FILE"
}
# 获取当前系统CPU使用率 (%)
get_cpu_usage() {
vmstat 1 2 | tail -1 | awk '{print 100 - $15}'
}
# 获取当前系统内存使用率 (%)
get_mem_usage() {
awk '/MemTotal/ {total=$2} /MemAvailable/ {available=$2} END {printf "%.0f", (total-available)*100/total}' /proc/meminfo
}
# 启动 lookbusy
start_lookbusy() {
local mem_to_use_mb=$1
local cpu_needed=$2
local cpu_args=""
if [ "$cpu_needed" = "true" ]; then
cpu_args="-c 20-50 -r curve -P ${CPU_CURVE_PERIOD} -p ${CPU_CURVE_PEAK}"
fi
if [ "$mem_to_use_mb" -gt 0 ] && [ "$cpu_needed" = "true" ]; then
log "启动 lookbusy: CPU模式='${cpu_args}', 内存目标=${mem_to_use_mb}MB"
nice -n 19 $LOOKBUSY_CMD $cpu_args -m "${mem_to_use_mb}M" &
elif [ "$mem_to_use_mb" -gt 0 ]; then
log "启动 lookbusy: 仅内存模式, 内存目标=${mem_to_use_mb}MB"
nice -n 19 $LOOKBUSY_CMD -m "${mem_to_use_mb}M" &
elif [ "$cpu_needed" = "true" ]; then
log "启动 lookbusy: 仅CPU模式='${cpu_args}'"
nice -n 19 $LOOKBUSY_CMD $cpu_args &
else
log "错误: 未指定CPU或内存模式"
return 1
fi
echo $! > "$PID_FILE"
}
# 停止 lookbusy
stop_lookbusy() {
if [ -f "$PID_FILE" ] && ps -p $(cat "$PID_FILE") > /dev/null; then
log "停止 lookbusy (PID: $(cat $PID_FILE))."
kill $(cat "$PID_FILE")
rm -f "$PID_FILE"
fi
}
log "守护进程启动。"
while true; do
CURRENT_HOUR=$(date +%H)
IS_LOOKBUSY_RUNNING=false
if [ -f "$PID_FILE" ] && ps -p $(cat "$PID_FILE") > /dev/null; then
IS_LOOKBUSY_RUNNING=true
fi
if [ "$CURRENT_HOUR" -ge "$START_HOUR" ] && [ "$CURRENT_HOUR" -lt "$END_HOUR" ]; then
CPU_USAGE=$(get_cpu_usage)
MEM_USAGE=$(get_mem_usage)
log "当前状态: CPU=${CPU_USAGE}%, MEM=${MEM_USAGE}%. lookbusy运行状态: ${IS_LOOKBUSY_RUNNING}"
if $IS_LOOKBUSY_RUNNING; then
if [[ "$CPU_USAGE" -gt "$CPU_UPPER_THRESHOLD" ]] || [[ "$MEM_USAGE" -gt "$MEM_UPPER_THRESHOLD" ]]; then
log "停止(高水位): CPU > ${CPU_UPPER_THRESHOLD}% 或 MEM > ${MEM_UPPER_THRESHOLD}%."
stop_lookbusy
else
log "维持运行: 系统在安全范围内."
fi
else
# 检查是否需要启动CPU模式
CPU_NEEDED=false
if [[ "$CPU_USAGE" -lt "$CPU_LOWER_THRESHOLD" ]]; then
CPU_NEEDED=true
fi
# 检查是否需要启动内存模式
MEM_TO_ALLOCATE_MB=0
if [[ "$MEM_USAGE" -lt "$MEM_LOWER_THRESHOLD" ]]; then
TOTAL_MEM_KB=$(awk '/MemTotal/ {print $2}' /proc/meminfo)
CURRENT_MEM_KB=$(awk '/MemTotal/ {total=$2} /MemAvailable/ {available=$2} END {print total-available}' /proc/meminfo)
TARGET_MEM_KB=$((TOTAL_MEM_KB * MEM_TARGET_PERCENT / 100))
MEM_TO_ALLOCATE_KB=$((TARGET_MEM_KB - CURRENT_MEM_KB))
if [ "$MEM_TO_ALLOCATE_KB" -gt 0 ]; then
MEM_TO_ALLOCATE_MB=$((MEM_TO_ALLOCATE_KB / 1024))
fi
fi
# 如果需要启动CPU或内存模式
if [ "$CPU_NEEDED" = "true" ] || [ "$MEM_TO_ALLOCATE_MB" -gt 0 ]; then
if [ "$CPU_NEEDED" = "true" ] && [ "$MEM_TO_ALLOCATE_MB" -gt 0 ]; then
log "启动(低水位): CPU < ${CPU_LOWER_THRESHOLD}% 且 MEM < ${MEM_LOWER_THRESHOLD}%, 启动CPU+内存模式."
elif [ "$CPU_NEEDED" = "true" ]; then
log "启动(CPU低水位): CPU < ${CPU_LOWER_THRESHOLD}%, 启动仅CPU模式."
else
log "启动(内存低水位): MEM < ${MEM_LOWER_THRESHOLD}%, 启动仅内存模式."
fi
start_lookbusy $MEM_TO_ALLOCATE_MB $CPU_NEEDED
else
log "维持停止: 未达到启动条件 (CPU=${CPU_USAGE}% >= ${CPU_LOWER_THRESHOLD}%, MEM=${MEM_USAGE}% >= ${MEM_LOWER_THRESHOLD}%)."
fi
fi
else
if $IS_LOOKBUSY_RUNNING; then log "停止(非工作时间)."; stop_lookbusy; fi
fi
sleep "$CHECK_INTERVAL"
done
魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐


所有评论(0)