1句代码,挽回1000万损失

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介: 1句代码,挽回1000万损失

前言:


       在企业中,出于数据安全和应用高可用,很多软件和企业会对工程文件、数据库等做自动备份和应用容灾等。一份数据或者文件会保留到很多地方,虽然满足了安全性的需求,但是会因为保存数据区间太久造成占用大量的存储成本。最凑巧的是,像我这种大怨种,刚好碰到大客户审核,因历史文件太多,造成系统卡顿,差点损失1000万的单子。


       随着数字化建设的不断开展,在深入应用阶段,会发现,这些备份文件会特别大,不仅占用磁盘空间,并且影响磁盘I/O。本次,已帆软report软件为例说说历史文件清理的必要性。


一、需求起源


1.1业务场景


       帆软report 升级至10.0以上版本后,其实稳定性已经高了非常多了,而且拥有宕机自启动功能。这得益于重构了产品,采用了新的引擎。但好像目前软件应对卡顿这个问题一直没有好的办法。好巧不巧,最近有次大客户审核,发生了一场持续3小时左右的系统卡顿。那真的是“王德发"。最可恶的是,后台没有任何报错,这对排查问题增加了一个level。卡顿阶段的后面日志是这样的。只看到满屏的debug日志在疯狂输出。

   


1.2需求分析


说实话,我也做过了很多关于帆软的项目,自认为在这块拥有很丰富的经验。但是因为这次后台没有报错,导致我第一次慌了。后面经过冷静分析和同事沟通发现,这个兄弟把正式环境的Debug模式开启了,因此后台才会疯狂输出日志。但是最凑巧的是,我们的服务器刚好是超融合的。相信很多企业都是这样,超融合的服务器存在一个很大的I/O问题,就是I/O性能相当较低,挂载固态硬盘成本高。因此当大量的日志写入磁盘,会导致系统卡顿,进而影响使用。如下图所示是我整个分析过程。


二、解决方案


2.1 降低I/O瓶颈


其实说实话还是第一次遇到 I/O瓶颈的问题,因为现在的服务器的I/O性能都能满足系统的应用,当初排查问题的时候都没往这块去思考。但正是犯了经验主义的错误,这次想记录下来分享给大家,希望大家下次遇到类似问题,能有所帮助。


       在上面提到了I/O瓶颈的处理方案:


       1、收回debug模式权限(已收回)


       2、给服务器配置固态硬盘,提高读写能力


       3、使用linux系统,对文件处理速度会快且友好


       4、缩短保存企业微信推送消息文件周期,减少至1个月内


2.2病根下手


       其实这次的I/O问题和帆软report这款软件的机制有一定的关系,因为在做企业微信消息推送的时候,每推送一次消息就会生成一个消息文件来保持历史消息记录。整个前端展现逻辑很优秀,也为我们企业的数字化建设提供了一个很好的抓手。因此我们企业应用的非常深入。如下图所示,企业微信已经被推送消息占满。

       假如上面那个图片不够震撼的话,我给你说一组数据,我们一个月企业微信推送消息文件就有60G ,60多万个文件。因此搭配上低I/O性能的磁盘,真的是有你难受的。


三、一句代码,药到病除


       因为经过业务分析,其实业务对历史推送消息的需求量不大,推送提醒其实更多的是实时性,这也是为啥会生成这么多消息文件,因为推送频率高,实时性高。


       但对历史消息要求就不高,当然我们在实际应用中,可根据自己的需求来自定义删除的文件。如下所示用来删除帆软report 30天前历史文件的效果。


3.1代码

FORFILES /p D:\WebReport\WEB-INF\schedule  /s /D -30 /C "cmd /c  DEL /q @path "


3.2代码阐述


       FORFILES /p D:\WebReport\WEB-INF\schedule  /s /D -30 /C "cmd /c  DEL /q @path "


       其中D:\WebReport\WEB-INF\schedule代表你需要删除的文件位置,后面的/S代表会遍历删除D:\WebReport\WEB-INF\schedule下面的子文件夹里面的文件,因此我们在写路径的时候只要写大目录即可。


       /D -30代表删除创建时间在30天之前的文件,这里面的30我们可以根据自己的需求更改,如更改成20就是删除20天的文件了。


3.3应用


       按照需求修改好代码后,我们另存为bat格式的文件,然后用Windows的任务计划程序,调用对应bat脚本就能定时执行了,再也不用操心历史文件太多带来的I/O问题了。

相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
相关文章
|
2月前
|
机器学习/深度学习 存储 人工智能
梯度累积的隐藏陷阱:Transformer库中梯度累积机制的缺陷与修正
在本地微调大规模语言模型时,由于GPU显存限制,通常采用梯度累积技术来模拟大批次训练。然而,实际研究表明,梯度累积方法在主流深度学习框架中会导致模型性能显著下降,尤其是在多GPU环境中。本文详细探讨了梯度累积的基本原理、应用场景及存在的问题,并通过实验验证了修正方案的有效性。研究指出,该问题可能在过去多年中一直存在且未被发现,影响了模型的训练效果。
124 4
梯度累积的隐藏陷阱:Transformer库中梯度累积机制的缺陷与修正
|
2月前
|
机器学习/深度学习 自然语言处理 算法
汉字的探索性分词方式:基于字图的部首分解与图神经网络的多因素表示
本文提出一种结合传统字符嵌入与部首结构的图表示法,用于捕捉汉字的语义和组成结构,提升大模型对汉字的理解能力。方法包括将字符分解为部首,构建部首图,并利用图卷积网络生成嵌入。此方法增强了模型的泛化能力和灵活性,并提供了代码实现。未来可优化的方向包括改进图构建算法、扩展部首系统、探索更先进的图神经网络架构及多模态融合。
|
3月前
|
机器学习/深度学习
【LLM提示技术:零样本提示、少样本提示】
本文介绍了零样本和少样本提示技术在大型语言模型中的应用。零样本提示指模型无需示例即可完成任务,而少样本提示则通过提供少量示例提升模型的表现。文中详细探讨了这两种技术的特点与限制,并通过具体示例说明了其在不同任务中的效果。研究表明,指令调整和人类反馈可增强模型性能,而对于复杂任务,则需更高级的提示工程,如思维链提示。
342 0
【LLM提示技术:零样本提示、少样本提示】
|
4月前
|
机器学习/深度学习
ChatGPT 等相关大模型问题之Transformer中将Attention值转换为概率如何解决
ChatGPT 等相关大模型问题之Transformer中将Attention值转换为概率如何解决
|
7月前
|
机器学习/深度学习 算法
LSTM时间序列预测中的一个常见错误以及如何修正
在使用LSTM进行时间序列预测时,常见错误是混淆回归和预测问题。LSTM需将时间序列转化为回归问题,通常使用窗口或多步方法。然而,窗口方法中,模型在预测未来值时依赖已知的未来值,导致误差累积。为解决此问题,应采用迭代预测和替换输入值的方法,或者在多步骤方法中选择合适的样本数量和训练大小以保持时间结构。编码器/解码器模型能更好地处理时间数据。
340 1
|
7月前
|
机器学习/深度学习 计算机视觉
【YOLOv8改进】MPDIoU:有效和准确的边界框损失回归函数 (论文笔记+引入代码)
YOLO目标检测专栏介绍了YOLO的有效改进和实战案例,包括卷积、主干网络、注意力机制和检测头的创新。提出了一种新的边界框回归损失函数MPDIoU,它基于最小点距离,能更好地处理不同宽高比的预测框,包含重叠、中心点距离和尺寸偏差的全面考虑。MPDIoU损失函数在YOLACT和YOLOv7等模型上的实验显示了优于现有损失函数的性能。此外,还介绍了WIoU_Scale类用于计算加权IoU,以及bbox_iou函数实现不同IoU变体的计算。详细实现和配置可在相应链接中查阅。
|
7月前
|
机器学习/深度学习 编解码 自动驾驶
【论文速递】WACV2022 - 基于小样本分割的多尺度Non-Novel片段消除方法
【论文速递】WACV2022 - 基于小样本分割的多尺度Non-Novel片段消除方法
|
资源调度 算法 关系型数据库
概率图推断之变量消除算法
事实证明,推理是一项颇具挑战的任务。对于很多我们感兴趣的概率,要准确回答这些问题都是NP难题。至关重要的是,推理是否容易处理取决于描述概率的图的结构。尽管有些问题很难解决,我们仍然可以通过近似推理方法获得有用的答案。
265 0
概率图推断之变量消除算法
|
数据挖掘 索引 Python
Python实现固定效应回归模型实现因果关系推断(二)
Python实现固定效应回归模型实现因果关系推断(二)
944 1
Python实现固定效应回归模型实现因果关系推断(二)
|
Python
Python实现固定效应回归模型实现因果关系推断(一)
Python实现固定效应回归模型实现因果关系推断(一)
847 0
Python实现固定效应回归模型实现因果关系推断(一)