You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Debian 10升级至Debian 12后rsync与du命令报内存不足错误求助

Debian 10升级至Debian 12后rsync与du命令报内存不足错误求助

遇到这种升级后常用工具突然报错的情况确实挺闹心的,结合你提供的信息,我梳理了几个可能的原因和对应的解决思路,你可以逐一尝试:

可能的原因分析

  • 虽然系统free显示还有不少可用内存,但rsync和du在处理大量小文件、深层嵌套目录或者大量符号链接时,会因为内核内存分配逻辑的变化(Debian 10到12的内核版本跨度不小),触发局部内存不足的问题。特别是readlink_stat报错,说明工具在处理文件元数据/符号链接时遇到了内存分配障碍。
  • 另外,升级后的文件系统缓存策略可能有调整,导致工具扫描目录时无法及时获取足够的内存资源。

具体解决办法

针对rsync的调整

  1. 拆分同步任务
    不要一次性同步整个vmail目录,按子域名或者子目录拆分,比如:

    /usr/bin/rsync -a -e "ssh -p9999" /home/vmail/domainA/ destserver:/home/vmail/domainA/
    /usr/bin/rsync -a -e "ssh -p9999" /home/vmail/domainB/ destserver:/home/vmail/domainB/
    

    这样每次处理的文件量减少,内存压力会小很多。

  2. 调整rsync参数优化内存占用

    • 添加--no-inc-recursive参数:让rsync先完整扫描源目录树再开始传输,避免边扫描边传输导致的内存累积(注意会增加初始扫描时间)
      /usr/bin/rsync -a --no-inc-recursive -e "ssh -p9999" /home/vmail/ destserver:/home/vmail/
      
    • 若不需要同步删除操作,添加--max-delete=0:避免rsync生成删除列表占用额外内存
    • 调整缓冲区大小:比如--buffer-size=1M,限制rsync的内存使用
  3. 临时调整进程内存限制
    先查看当前用户的进程内存限制:

    ulimit -a
    

    如果max memory size不是unlimited,临时调整后再运行rsync:

    ulimit -v unlimited
    /usr/bin/rsync -a -e "ssh -p9999" /home/vmail/ destserver:/home/vmail/
    

    要是有效,可以把ulimit -v unlimited加到用户的~/.bashrc或者cron的环境配置里。

针对du命令的调整

  1. 限制扫描范围

    • 加上-x参数,让du不跨文件系统扫描,避免误扫挂载的其他分区:
      du -x /home/vmail
      
    • 先查看一级目录的大小,逐步排查异常子目录:
      du --max-depth=1 /home/vmail
      
  2. 清理系统缓存后重试
    临时清理文件系统缓存,释放内存后再运行du:

    sync && echo 3 > /proc/sys/vm/drop_caches
    du /home/vmail
    

额外排查方向

  • 统计vmail目录下的符号链接数量,看看是否异常多:
    find /home/vmail -type l | wc -l
    
    如果符号链接数量极大,可能是rsync处理时的内存瓶颈所在,可以考虑过滤符号链接同步(添加--no-links参数,但要确认业务是否允许)。

备注:内容来源于stack exchange,提问作者Sym

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.20 11:09:51