专业网盘中大文件夹移动、复制问题解决实践

GitHub专业协作:从代码托管到工程操作系统 GitHub 不仅是 Git 的可视化托管平台,更是覆盖需求管理、代码评审、自动化构建与知识沉淀的完整工程协作系统。其核心价值在于通过标准化流程(如 Conventional Commits、语义化分支、结构化 Issue/PR)降低团队协作熵值,提升可追溯性、可预测性与可验证性。在现代研发场景中,规范使用 GitHub 已成为保障交付质量、加速新人融入、支撑规模化协作的技术基础设施。本文聚焦 GitHub 作为‘工程操作系统’的本质定位,结合金融、SaaS 和 AI 领域真实项目经验,详解如何将 Issu 阅读详情

背景:

为了方便客户,增加客户粘性,公司设计了一套某行业专用的网盘系统,主要保存图片素材,设计文件。
某些头部客户一个月就有上万个文件,某行业第一在系统迁移的时候一次性导入了15T的各类素材。
随着数据量增加,大文件夹的移动、复制异常逐步暴露出来,由于是和行业应用深度绑定,我们的网盘不仅保存文件的基本信息(文件名、文件父子关系)还有文件目录权限、文件特性等业务信息。方便客户在网盘中使用自己保存的文件。

文件移动发生OOM

某日系统报警,发现生产环境某个节点频繁重启,同事前方客服传来消息,某个重量级客户在操作文件夹复制的时候莫名报错了,赶紧找运维拿了dump文件,经过分析果然是OOM了,在文件移动的逻辑中,所有文件信息都被读进去内存,某个结果Result Lsit 中持续写入需要移动的文件信息,导致jvm 出现了OOM ,同时docker 容器重启。

定位问题之后分析文件移动逻辑,发现复制也是如此

而且复制还更复杂。

文件移动

网盘的文件移动其实很简单,抛去文件的权限、深度等信息,只要要移动的文件父节点和子节点关系更新掉就好,由于我们的网盘深度绑定了业务,导致需要诸暨递归更新所有的文件信息,包含权限、深度,同时移动的时候做了目录深度、广度、重名等逻辑处理,这就导致内存中90% 的信息其实和文件移动逻辑没关系,由于文件的ID 查找走了ES,所有在遍历 LIST ids 从MySQL 数据库中批量拿文件详情的时候oom。

这个时候我便整理好思路,文件移动逻辑只是处理文件移动相关的信息,文件特征信息不读到内存,这样正在递归处理文件树的时候,只需要把移动后的文件权限、深度等信息更新到MySQL 数据 之后同步到ES 即可。

这个方案评审之后,我便交给一个组员开始实现。其中我还写好了主流程。

文件复制

文件复制比较复杂的是 我需要把文件特征值也复制一份,这样的话就避免不了内存过大,同事文件数量多的时候 比如10万 就有一个过程,就像平时windows 系统内的文件夹 复制 、剪切,其实剪切的时候我们都不会进行操作,只是硬盘中数据移动,如果是是复制,windows 的策略是不锁定被复制对象,你可以继续操作被复制对象,如果你在编辑一个Word 复制过程会提示 是否跳过或者你关掉Word 编辑器,继续复制。

我们系统产品都没想到会有这个过程,所以给了一个临时方案 限制复制数量,保证一次性复制成功。

文件移动的改造

由于测试环境数据量不大,所以测试一切顺利,上了灰度,可以操作用户生产数据了,结果炸了,文件移动时候超过2000 马上内存主键升高,直到docker 容器重启。

查看监测数据,发现

1.移动的时候 网络IO 陡升,从50k 到了50mb。
2.CPU 持续高位利用率 疯狂的计算直到容器被重启
3.内存迅速升高直到容器重启
4.一分钟内产生大量日志文件,被分段策略分出很多压缩日志。

问题定位

由于业务逻辑日志打印了从ES 查询的返回结果,发现日志刷屏了,公司的发布系统性能一般,根部看不了大日志,根据关键字筛选,发现Es 返回了数据,并未数据超过2000个文件。

接着怀疑是Java 内存泄露,但看了代码发现根本没执行到很多逻辑,打印ES 返回的数据之后 日志就没了,范围缩小到了调用ES 返回结果的前后,接着看日志,发现请求ES 的参数有问题,这之前根本没想到这种分页参数会有问题

上代码

 try {
   
   
                int from = 0;
                int size = context
Altium Designer库管理全攻略:从原理图到集成库的规范实践 在电子设计自动化(EDA)领域,元件库管理是电路设计的基础环节,直接影响设计效率和可靠性。其核心原理在于建立符号与封装的准确映射关系,通过规范的库结构确保设计数据的一致性。从技术价值看,良好的库管理能显著减少设计错误、提升团队协作效率,并便于版本控制。在应用场景上,无论是个人项目还是团队协作,都需要建立清晰的库目录结构和命名规范。本文聚焦Altium Designer中的库管理实践,深入解析原理图库(.SchLib)、PCB库(.PcbLib)与集成库(.IntLib)的协同工作机制,并提供从库创建、验证到 阅读详情

相关推荐

2024年企业文件加密软件选型指南:核心技术、十大方案与部署避坑

数据加密是信息安全领域的基石技术,其核心原理是通过特定算法将明文信息转换为不可读的密文,确保数据在存储和传输过程中的机密性与完整性。AES-256等现代加密算法提供了强大的安全保障,其技术价值在于为静态和动态数据构建主动防御层,有效应对数据泄露、勒索软件等威胁。在企业环境中,文件加密软件将这一技术工程化,广泛应用于保护设计图纸、财务数据、源代码等核心数字资产。本文聚焦企业级文件加密,深入解析驱动层透明加密等主流技术,并基于行业实践,横评亿赛通、IP-guard等十款2024年主流方案,为选型与部署提供关键洞

weixin_30596735的博客 419

20款开源知识管理工具深度评测与选型指南

在信息时代,知识管理是提升个人与团队效率的核心。其原理在于通过系统化工具,将零散信息转化为结构化、可复用的知识资产,从而打破信息孤岛,促进知识沉淀与传承。从技术价值看,开源知识管理工具提供了数据自主、无供应商锁定和高度定制化的优势,尤其适合注重安全与可控性的技术团队。常见的应用场景包括构建团队Wiki、关联代码与文档、管理碎片化笔记以及利用AI构建智能知识图谱。本文聚焦于开源知识库和开源模型领域,深入评析了MediaWiki、Obsidian、Logseq等20款热门工具,涵盖从经典Wiki到现代AI增强方

weixin_34416649的博客 430

快速复制、粘贴大文件,让你移动大件不用愁

复制大文件不用愁! 21秒拷贝424MB文件

提升复制.移动大文件时的速度.ZIP

提升复制大文件 移动速度可达百倍以上提升复制.移动大文件时的速度.ZIP

CentOS7下通过YUM源高效部署Zabbix7 Agent指南

本文详细指导在已结束生命周期的CentOS7系统上,通过更换YUM源(如阿里云镜像)并添加Zabbix官方仓库,高效部署Zabbix7 Agent。文章涵盖从源配置、软件安装、关键参数修改到服务启动与防火墙设置的全流程,帮助用户解决依赖错误,快速建立服务器监控。

weixin_29230059的博客 268

Win7/Win10双系统兼容指南:Arduino IDE 1.8.19与2.3.2的安装避坑全攻略

本文详细解析了在Win7/Win10双系统环境下安装和配置Arduino IDE 1.8.19与2.3.2版本的完整指南,特别针对ESP32开发环境的深度配置和COM端口常见问题提供了实用解决方案。通过版本对比、安装优化和性能调优,帮助开发者高效搭建稳定的物联网开发环境。

weixin_30500105的博客 187

innovus获取mem pin shape box脚本

innovus mem 的pin shae只能通过attitude editor看属性获取其pin shape的box,但是想用脚本处理一定box时,没有别的办法能直接获取box属性。我正在「拾陆楼」和朋友们讨论有趣的话题,你⼀起来吧?

m0_61544122的博客 1108

LED灯闪烁实验:实验介绍

每个章节都会单独进行验证工作,例如Simulink开发的应用层软件,会在Simulink-TestHarness中进行仿真,通过Scope示波器模块输出0-1交替的结果。CubeIDE集成双方的代码后,会烧写到开发板中验证是否按照定义的时间进行闪烁。ST-LINK V2是STM32开发生态系统中常用的硬件调试接口,能够连接微控制器与开发环境,实现程序的下载、调试和分析。STM32F103C8T6最小系统板是基于STM32F103C8T6微控制器的开发板,本实验会涉及使用板载的连接PC13引脚的LED灯。

u013288925的博客 457

复现论文《大规模风电场电磁暂态高效建模仿真方法》

本文提出了一种针对大规模风电场电磁暂态(EMT)仿真的高效建模方法。通过三种关键技术实现仿真加速:(1)永磁直驱风电机组一体化等效建模,采用节点导纳矩阵降维将25节点机组简化为4端子电路,仿真速度提升1-3个数量级;(2)基于戴维南/诺顿等效和OpenMP并行计算的风电场整体建模,通过串并联叠加实现节点收缩,30台机组仿真加速近万倍;(3)受控源映射解耦方法提高故障仿真灵活性。复现代码展示了核心算法实现,包括导纳矩阵Schur补降维、多进程并行计算框架以及受控源解耦方法。

huanghm88的专栏 279

Android系统开发面试指南:系统Launcher岗位解析

本文针对上海礼聪Android系统开发岗位(侧重系统Launcher、充电/电池/USB底层开发)提供面试指南。内容涵盖应用开发(启动流程优化)、系统底层(充电状态机、USBOTG)、编程能力(线程安全LRU实现)、问题排查(ANR分析)及沟通协作等核心考点。通过5类典型问题及技术深度解析,帮助候选人系统准备,重点考察Framework源码理解、系统调试能力和工程思维。建议结合PowerManagerService等模块源码和systrace工具进行实践准备,同时注重技术表达与协作能力的展现。

郑伟强dev的专栏 934

VSCode + QMT 量化交易完整解决方案!

🏆本文收录于 《全栈 Bug 调优(实战版)》 专栏。专栏聚焦真实项目中的各类疑难 Bug,从成因剖析 → 排查路径 → 解决方案 → 预防优化全链路拆解,形成一套可复用、可沉淀的实战知识体系。无论你是初入职场的开发者,还是负责复杂项目的资深工程师,都可以在这里构建一套属于自己的「问题诊断与性能调优」方法论,助你稳步进阶、放大技术价值 。

**My Coding Family** 1327

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

上一篇: 会员微服务设计文档
下一篇: mac Gradle idea中启动单元测试
hamish-wu
博客等级 码龄15年 2814粉丝 162原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值