1句代码,挽回1000万损失

news2024/11/28 11:31:20

前言:

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

         好了,后续大家还有任何疑问,欢迎留言讨论,希望你们不要再去踩一遍我的坑了,在升职加薪路上,越走越顺~

        

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/628660.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

chatgpt赋能python:Python快速入门神器:入门教程

Python快速入门神器:入门教程 Python作为一种高级的编程语言,在近年来逐渐成为编程语言领域里面的一匹黑马,在数据科学、人工智能、自动化测试和WEB开发等领域都得到了广泛的应用。Python极易入门,使用简单,代码质量较…

UnityVR--组件8--Avatar骨骼映射遮罩

什么是Avatar 模型中的人物都具有结构相似的骨架,如果建立一个模型骨架结构的映射,就能将同一个动画应用于不同的模型中,这就是Avatar,实现了一种动画重定向的功能。一般使用3DMax、Maya制作并导出为.fbx的人物模型,在…

【MySQL】MySQL在Linux中的环境安装与基本使用

目录 一、MySQL环境的安装 1、MySQL环境安装 2、安装MySQL出现的问题 3、登录MySQl 3.1方案一 3.2方案二 4、修改MySQL配置文件 5、可选设置:开机自启动MySQL(云服务器没事一般不会关机) 二、MySQL数据库基础 1、一些概念 2、基本…

Java中进制转换的两种方法你知道吗?

目录 十进制转其他进制 其他进制转十进制 实战: A进制转B进制 关于大数运算可以参考躲不掉的高精度计算,蓝桥杯必考_高精度算法在哪些比赛考_无忧#的博客-CSDN博客 十进制转其他进制 使用 Integer.toString(int n,int radix) 方法,该方法…

【LeetCode】739. 每日温度

739. 每日温度(中等) 思路 我们可以维持一个单调递减的栈,表示每天的温度;为了方便计算天数差,这里存放位置(下标),而非温度本身。因为温度可以通过访问数组下标获取。 从左向右遍历…

书接上文,基于藏文手写数字数据开发构建yolov5n轻量级藏文手写数字检测识别系统

在上一篇文章中:《python基于轻量级CNN模型开发构建手写藏文数字识别系统》 开发实现了轻量级的藏文手写数字识别系统,这里主要是想基于前文的数据,整合目标检测模型来进一步挖掘藏文手写数字数据集的可玩性,基于yolov5n开发构建…

Android kotlin序列化之@Parcelize详解与使用

一、介绍 在Android开发过程中,序列化使用概率一直很高。在页面之间传递的对象,需要要使用序列化,常见的序列化:Parcelable、Serialization。 由于Parcelable在传递压缩比高,效率高,一直被Google官方推荐。…

可调电阻器

1、可调电阻(Trimming Potentiometer,Variable Resistor) 1.1、电气特性(Electrical Characteristics) ItemSpec ExampleDescriptionTotal Resistance(TR),总和阻抗200K端子1和3之间…

独立按键检测短按、长按,松手后响应操作

背景 有项目使用独立按键检测,短按、长按。根据使用效果,发现松手后,也就是按键弹起后响应操作比较好操作。 记得之前,博主写过一篇关于按键的检测的文章,但是过于复杂了。可能很难懂,这里就简单一点&…

Flask学习-环境配置

目录 一.环境部署 二.Flask基本结构 三.完整代码 四.运行效果 一.环境部署 在安装好python,pip环境的基础上在命令行输入如下指令: pip install flask flask框架即安装完毕。 二.Flask基本结构 flask的使用通过创建实例实现。创建方法如下&…

ArgoCD(五)----ArgoCD 各CRD资源配置文件规范

3.4.1 Application资源规范 Application CRD的spec字段主要嵌套如下几个字段: source :配置仓库及相关的配置访问及使用方法;支持如下几种类型: kubernetets的原生配置文件Helm chartkustomize:由kustomize字段进行定义…

软件测试实战,支付二维码测试-测试点汇总,全面覆盖...

目录:导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结(尾部小惊喜) 前言 面试的时候&#…

递归——先递后归——平衡二叉树

目录 1.什么是递归 (1)问问无所不能的chatgpt。 ​(2)我的理解 2.递归的应用之——树 (1)二叉树的录入与打印 (2)举个例子:将有序的数组转化为平衡二叉树 1.什么是递…

ffmpeg中的avs解码器综述

最近拿了一个avs的视频流,用硬件可以解码,但是ffmpeg自带的却无法解码。 所以研究了一下,首先看ffmpeg的avs解码器: 可以看到avs有两个,第一个是avs 第二个是cavs. 我们先用avs来解码,解码的视频是通过【a…

浅谈医院能耗监控平台研究与应用

摘要:综合性医院作为大型公共机构,能耗高的问题日益突出,构建能耗监控平台对医院能耗量化管理以及效果评估已经成为迫切需要。建立智能能耗监控平台,对采集的能耗数据进行分析,实现对医院能耗平台监控,为医…

java并发编程:Fork/Join并发框架介绍

文章目录 Fork/Join简介工作窃取算法Fork/Join的具体实现ForkJoinTaskfork()方法join()方法 ForkJoinPoolWorkQueuerunState Fork/Join的异常处理Fork/Join的使用 Fork/Join简介 Fork/Join框架是一个实现了ExecutorService接口的多线程处理器,它专为那些可以通过递…

java的内部类

1.内部类的概念 内部类表示的事物是外部类的一部分,内部类单独出现没有任何意义。如发动机是汽车的一部分。 内部类的访问特点: (1)内部类可以直接访问外部类的成员,包括私有; (2)外…

11.无监督学习之主成分分析

11.1 降维 降维的两种应用:一是数据压缩;二是可视化数据。 11.1.1 数据压缩 将相关性强的两个特征导致冗余,可以直接去掉其中一个特征,或者将两个特征进行某种转换,得到一个特征。 11.1.2 可视化数据 直接看数据可…

设计模式:提升软件设计质量的利器,适合入门者的指南

目录 导言:设计模式的概念常见的设计模式2.1. 单例模式(Singleton Pattern)2.2. 工厂模式(Factory Pattern)2.3. 观察者模式(Observer Pattern)2.4. 策略模式(Strategy Pattern&…

OpenGL 摄像机

1.简介 OpenGL本身没有摄像机(Camera)的概念,但我们可以通过把场景中的所有物体往相反方向移动的方式来模拟出摄像机,产生一种我们在移动的感觉,而不是场景在移动。 要定义一个摄像机,我们需要它在世界空间中的位置、观察的方向…