计划任务启动的时候占用CPU非常高

反馈问题: [计划任务启动的时候占用CPU非常高]
1Panel 版本:v2.2.5
操作系统(设备): Ubuntu 24.04 LTS
关键截图:
日志:




启动下面的任务的时候CPU占用巨高百分之30左右,目前排查下来和执行内容无关到定时的执行的时候占用就上去了,我单独执行脚本并不会占用很多CPU 大概百分之1-2,但是只要到计划任务执行时间 CPU占用在百分之30以上所以我怀疑是启动脚本的时候占用很多CPU。

下面的图是修改了执行频率 从原来的3秒 修改为10秒 监控占用就下来很多 目前已经确定不用计划任务 持续执行下面的脚本哪怕1秒一次 都不会占用超过百分之3的CPU占用,所以基本确定是因为 计划任务启动的时候CPU占用很高 而不是脚本内容导致占用高

脚本内容

#!/bin/bash
# 文件:/usr/local/bin/monitor_snapshot.sh
# 抓取 CPU/内存 异常现场

THRESHOLD_CPU=80
THRESHOLD_MEM=80
LOG_DIR="/var/log/monitor_snapshots"
mkdir -p "$LOG_DIR"

# 1. 获取当前瞬时 CPU 使用率
CPU_USAGE=$(vmstat 1 2 | tail -1 | awk '{print 100 - $15}')

# 2. 获取当前真实内存使用率
MEM_USAGE=$(free | awk '/Mem:/ {printf "%d", ($2-$7)/$2 * 100}')

if [ "$CPU_USAGE" -gt "$THRESHOLD_CPU" ] || [ "$MEM_USAGE" -gt "$THRESHOLD_MEM" ]; then
    TIMESTAMP=$(date '+%Y%m%d_%H%M%S')
    SNAPSHOT_FILE="$LOG_DIR/snapshot_${TIMESTAMP}.log"
    
    echo "===== 触发时间: $(date) =====" > "$SNAPSHOT_FILE"
    echo "===== CPU使用率: ${CPU_USAGE}% | 内存使用率: ${MEM_USAGE}% =====" >> "$SNAPSHOT_FILE"
    
    echo -e "\n>>> [进程快照] top (按 CPU 排序前 20):" >> "$SNAPSHOT_FILE"
    top -bn1 | head -30 >> "$SNAPSHOT_FILE"
    
    echo -e "\n>>> [进程快照] ps (按 内存 排序前 20):" >> "$SNAPSHOT_FILE"
    ps aux --sort=-%mem | head -20 >> "$SNAPSHOT_FILE"
    
    # === 针对容器化环境 ===
    if command -v docker &> /dev/null; then
        echo -e "\n>>> [Docker 状态] 各容器资源占用:" >> "$SNAPSHOT_FILE"
        docker stats --no-stream >> "$SNAPSHOT_FILE" 2>&1
        
        echo -e "\n>>> [Docker 状态] 异常容器日志(最后20行):" >> "$SNAPSHOT_FILE"
        # 如果有特定的 mongo 容器
        for container in $(docker ps --format "{{.Names}}"); do
            echo "--- 容器: $container ---" >> "$SNAPSHOT_FILE"
            docker logs --tail 20 "$container" >> "$SNAPSHOT_FILE" 2>&1
        done
    fi
    
    echo -e "\n>>> [网络连接] 连接数状态统计:" >> "$SNAPSHOT_FILE"
    ss -s >> "$SNAPSHOT_FILE"
    echo "TCP 连接状态分布:" >> "$SNAPSHOT_FILE"
    ss -ant | awk '{print $1}' | sort | uniq -c | sort -rn >> "$SNAPSHOT_FILE"
    
    echo -e "\n>>> [磁盘IO] 状态:" >> "$SNAPSHOT_FILE"
    if command -v iostat &> /dev/null; then
        iostat -x 1 2 >> "$SNAPSHOT_FILE"
    else
        echo "iostat 未安装,请执行 apt install sysstat" >> "$SNAPSHOT_FILE"
    fi
    
    echo -e "\n>>> [系统容量] 进程总数 & 打开文件数:" >> "$SNAPSHOT_FILE"
    echo "总进程数: $(ps aux | wc -l)" >> "$SNAPSHOT_FILE"
    echo "系统文件句柄打开数: $(cat /proc/sys/fs/file-nr)" >> "$SNAPSHOT_FILE"
    
    echo "[$(date)] 告警快照已保存: $SNAPSHOT_FILE" >> "$LOG_DIR/monitor.log"
fi