搜索结果

×

搜索结果将在这里显示。

PVE 垃圾回收 (GC) 进程 CPU 占用过高问题解决教程

PVE 垃圾回收 (GC) 进程 CPU 占用过高问题解决教程

📋 问题现象

  • PVE 宿主机 CPU 长期居高不下(60%+)
  • top 命令看到 .pve-gc 进程占用 190%-210% CPU
  • 进程被杀死后会自动重启,PID 不断变化

🔍 第一步:确认问题

top -b -n 1 | head -20

🛑 第二步:立即临时处理

kill -9 $(pgrep -f "\.pve-gc") 2>/dev/null

⏰ 第三步:禁用自动触发定时器

systemctl stop pve-daily-update.timer
systemctl disable pve-daily-update.timer
systemctl status pve-daily-update.timer

📁 第四步:找到 GC 可执行文件

find / -name "*pve-gc*" 2>/dev/null

🔒 第五步:彻底锁死 GC 文件

# 5.1 杀死当前GC进程
kill -9 $(pgrep -f "\.pve-gc") 2>/dev/null

# 5.2 覆盖文件内容为空脚本
echo '#!/bin/bash' > /var/lib/pve/.cache/.pve-gc
echo 'exit 0' >> /var/lib/pve/.cache/.pve-gc

# 5.3 移除执行权限
chmod 000 /var/lib/pve/.cache/.pve-gc

# 5.4 加锁防止被修改
chattr +i /var/lib/pve/.cache/.pve-gc

# 5.5 验证
ls -la /var/lib/pve/.cache/.pve-gc
lsattr /var/lib/pve/.cache/.pve-gc

🛡️ 第六步:创建 CPU 限制脚本(可选)

cat > /usr/local/bin/limit-gc.sh << 'EOF'
#!/bin/bash
mkdir -p /sys/fs/cgroup/cpu/gc-limiter 2>/dev/null
echo 10000 > /sys/fs/cgroup/cpu/gc-limiter/cpu.cfs_quota_us 2>/dev/null
echo 100000 > /sys/fs/cgroup/cpu/gc-limiter/cpu.cfs_period_us 2>/dev/null

while true; do
    ps aux | grep "\.pve-gc" | grep -v grep | awk '{print $2}' | while read pid; do
        if [ ! -z "$pid" ]; then
            echo $pid > /sys/fs/cgroup/cpu/gc-limiter/cgroup.procs 2>/dev/null
            echo "$(date): 已限制GC进程 PID=$pid" >> /var/log/gc-limited.log
        fi
    done
    sleep 2
done
EOF

chmod +x /usr/local/bin/limit-gc.sh

🔄 第七步:设置开机自启(可选)

echo '/usr/local/bin/limit-gc.sh &' >> /etc/rc.local
chmod +x /etc/rc.local
tail -n 5 /etc/rc.local

🚀 第八步:立即启动限制脚本(可选)

nohup /usr/local/bin/limit-gc.sh >/dev/null 2>&1 &
ps aux | grep limit-gc.sh

✅ 第九步:最终验证

top -b -n 1 | head -10
ps aux | grep "\.pve-gc" | grep -v grep

📊 常用验证命令汇总

# 查看CPU
top -b -n 1 | head -10

# 查看GC进程
ps aux | grep "\.pve-gc" | grep -v grep

# 查看GC文件状态
ls -la /var/lib/pve/.cache/.pve-gc
lsattr /var/lib/pve/.cache/.pve-gc

# 查看定时器状态
systemctl status pve-daily-update.timer

# 查看限制脚本日志
tail -f /var/log/gc-limited.log

✅ 完成标准

  • [ ] CPU 利用率 < 10%
  • [ ] 没有 .pve-gc 进程
  • [ ] GC 文件权限为 000,属性为 +i
  • [ ] 系统负载平稳

⚠️ 注意事项

  1. 第五步是核心:锁死 GC 文件后它就永远无法执行
  2. 重启后依然有效:文件锁和权限永久保留
  3. 定时器禁用:防止每天自动触发
  4. 双重保险:文件锁死 + 限制脚本(可选)