【Linux】关于我删文件力度过大导致IO占用太高的解决思路

2023-05-16

关于我删文件力度过大导致IO占用太高的解决思路

  • 前言
  • 正文
    • 现象描述
    • 问题分析
    • 处理过程
      • nice命令限制优先级
      • ionice命令限制
      • 改造perl脚本
  • 结语

前言

书接上回,前两天刚找到删文件性能比较OK的方式后,测试没啥问题就在生产环境开始操练了, 虽然文件是在持续删除着,但是跑了一段时间以后,执勤同事找我说IO满了,问我是不是做了啥,我上去一看还真是,然后让我先停了:
在这里插入图片描述
但是文件也不能不删,脚本还是要跑,基于这个问题,看看怎么样控制IO又能够持续做文件清理。

正文

现象描述

先详细描述一下问题的现象,我在上午9点左右把脚本起来以后,观察了一会任务执行,发现没啥问题就做别的事情了,让脚本一直在服务器运行,大概中午的时候,找到我说IO太高了,让我看下,然后看IO升高和我的脚本基本是同一时间开始的,监控图如下,我11:30左右把脚本完全停了以后,IO就没有再这么高了:
在这里插入图片描述

问题分析

我在之前的一篇文章中说到相比较而言,文件清理最快的方式是find + delete的方式,这也是我选择的文件清理方式,但是问题就在于,使用find . -mtime +3 -type f -delete这种命令我没法在脚本这一层对他的删除做限制,比如删除1000个文件休眠5秒。这个时候想到用nice这些命令对进程优先级做限制,尝试限制IO的占用;或者在perl脚本中做限制,两种方法应该都是可行的,主要是在实际使用上是不是会有差异;

处理过程

nice命令限制优先级

可以使用man nice查看nice命令的使用方式,还是比较简单的:
在这里插入图片描述
nice命令只有一个参数-n,用来指定要设置的优先级,可选范围在-20到19,数字越大优先级越低(看到一个比较有意思的理解:nice代表这个人是个好人,越nice人约好,他就越谦让,所以优先级越低:D),在启动清理命令之前加上nice -n 19就能直接指定优先级运行了,如下:

nice -n 19 find . -mtime +3 -type f -delete

在这里插入图片描述
根据监控来看,似乎并没有什么用,使用top命令看了下,优先级是生效了的,看来这个方法不奏效。
在这里插入图片描述

ionice命令限制

另一个查到的方法是ionice,这个命令貌似可以直接对IO的调度策略和优先级做限制,使用man ionice可以看到命令的详细用法:

在这里插入图片描述
简单介绍下:

参数作用取值描述
-c, --class调度类,调度方式0,1,2,30对应none,1对应realtime,2对应best-effort,3对应idle
-n对应调度类下的级别0-7只对realtime和best-effort有效
-p指定PIDpid号指定要做调整的进程pid,如果是执行命令,那就直接带上命令就可以

关于调度策略的解释:

  • idle:当没有其他进程请求磁盘I/O时,才会进行磁盘IO,也就是说最后考虑;
  • realtime:对磁盘进行优先访问,也就是说进程的IO请求会被优先处理;
  • best-effort:该调度策略取值为0-7,数值越低,优先级越高,内核2.6.26之前,使用none等同于使用best-effort

具体的可以搜下IO的CFQ调度算法了解下,这里不展开讨论了;

随后测试了一下ionice的控制:

ionice -c 2 -n 7 find . -mtime +3 -type f -delete

在这里插入图片描述
感觉还是没太大作用,IO还是会打到100%,也可能是技艺不精,没找对方法;看样子只有自己在脚本里做控制了;

改造perl脚本

实在没有办法了,只有在我的清理脚本里做控制,把find方式换成了perl脚本,然后做了一层控制:

#!/usr/bin/perl

use File::Find;
use File::Spec;

my $path="xxx";

opendir DH, $path or die "cannot chdir to $path : $!";

for my $p (readdir DH) {
    my $idle=0; # 已删除的文件数,初始化为0
    my $sleep_time=5; # 休眠时间5秒
    next if $file eq "." or $file eq "..";
    my $sonpath=File::Spec->catdir($path,$p);
    opendir SH, $sonpath or die "cannot chdir to $sonpath : $!";
        for my $file (readdir SH) {
            next if $file eq "." or $file eq "..";
            next if $file =~ /^\./;
            my $abspath=File::Spec->catdir($sonpath,$file);
            my @s=stat("$abspath");
            if ((time()-$s[8]) > (60*60*24*2)){
                print "delete file $abspath\n";
                unlink $abspath;
                $idle=$idle+1; # 完成文件的清理后 
                if ($idle>=500){ 
                    print "finish delete $idle files, will sleep $sleep_time.\n";
                    $idle=0; # 当删除文件数达到500个的时候,手动休眠
                    sleep($sleep_time);
                }
            }
        }
    closedir SH;
}
closedir DH;

接下来运行脚本进行清理:
在这里插入图片描述
再看监控图,终于是稳定维持在一个水平了:
在这里插入图片描述

结语

虽然通过脚本的方式控制了文件清理对IO的占用,但是这算是没办法的办法,若是能够对Linux的IO调度策略再熟悉些,也许我能找到更好的办法吧,学无止境~

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【Linux】关于我删文件力度过大导致IO占用太高的解决思路 的相关文章

  • 分享一个简单的Tomcat本地开发脚本

    最近在搞java web service xff0c 一开始开发的时候都是用Maven集成Jetty来运行 xff0c 感觉很方便 但是 xff0c 当需要一次运行多个war的时候就显得力不从心了 同时 xff0c
  • 我和Java 8的第一次亲密接触

    周五上班偶然发现单位的系统里有Java 8可以用了 xff0c 周六无事 xff0c 把自己现在在做的一个项目从Java 1 6升级到了1 8 过程并不是一番风顺 xff0c 在此记录 xff0c 希望可以对各位看客有所帮助 先说说现在在做
  • C#中调用PDFCreator生成PDF文件

    前一阵子做了一个生成报表的小project xff0c 生成的报表是关于股价的记录 没有什么现成的包和第三方程序给我们用 xff0c 听说WPF渲染的页面可以之间存成PDF xff0c 不过只是道听途说 xff0c 没敢真正实践 xff0c
  • 一个简单的审批流程模型

    最近在做一个审批流程的模块用来支持对一些事务的审批 基本的业务要求如下 xff1a 1 模型需要支持两级审批 xff0c 在这里我们定义为有一半权限的B Approver xff0c 和有更高权限的C Approver xff1b 2 每一
  • node.js连接Sql Server数据库

    最近对node js比较感兴趣 xff0c 网上的例子大多都是node js集成MongoDB 我对MongoDB实在不是太感冒 xff0c 并不是因为它有什么不好听 xff0c 只是在工作上的确是很难遇到 在工作上还是和Sql Serve
  • 由有向图的邻接矩阵生成其可达矩阵

    矩阵是研究图的性质的最有效工具之一 xff0c 可运用矩阵运算求出图的路径 回路和其它性质 有些时候我们需要知道所给的图G中的某两个点之间是否存在边 xff0c 为此前人引入了可达矩阵 定义不再赘述 xff0c 在此给出一个由公式实 现的代
  • 【Android】串口通信的理论与使用教程

    Android系统诞生这十几年以来 xff0c Android开发工程师岗位经历了由盛转衰的过程 xff0c 目前纯UI的Android APP已经鲜有公司愿意花费巨资去开发 xff0c Android APP开发的业务也仅剩游戏 物联网
  • 《自己动手写Docker》书摘之三---Union File System介绍

    Union File System UnionFS unionfs是一种为Linux xff0c FreeBSD和NetBSD操作系统设计的把其他文件系统联合到一个联合挂载点的文件系统服务 它使用branch把不同文件系统的文件和目录 透明
  • 《程序设计基础课程设计》实验报告

    程序设计基础课程设计 实验报告 班 级 xff1a 学 号 xff1a 姓 名 xff1a 完成题目 xff1a 1 2 3 4 5 6 概述 此次六道题目里面第四题是参考某博主的文章后实现的 xff0c 有一些地方仍然不是特别理解 xff
  • C语言实现关系的闭包运算

    问题描述 xff1a 利用矩阵求解有限集上给定关系的自反和对称闭包 输入格式 xff1a 首先输入关系矩阵R的维数 xff0c 回车之后输入矩阵每个元素 xff0c 以空格或回车分开 只能输入0或1 输出格式 xff1a 输出自反闭包关系矩
  • 简单易懂的C语言课程设计图书管理系统

    最近几天一直在做课程设计的作业 xff0c 图书管理系统是其中的第六题 xff0c 和同学交流的时候发现好多人都用了链表去写 xff0c 但是我感觉没必要 xff0c 所以使用的代码比较基础 xff0c 适合初学者借鉴 先看一下题目 xff
  • C语言程序设计——前两道题(判断有效三角形和高精度计算的加减法)

    第1题 1 原题 xff1a 假设平面上有1 N x y 个坐标点 xff0c 编程判断这N x y 个点能组成多少个有效三角形 问题分析 xff1a 本题为一道基本编程题 xff0c 要点就是判断三个点能构成三角形的条件 解决方案 xff
  • C语言程序设计之RLE压缩解压算法

    先介绍一下RLE压缩算法 xff1a 游程编码 xff08 Run Length Encoding RLE xff09 又称行程长度编码或者变动长度编码法 xff0c 在控制理论中对于二值图像而言是一种编码方法 xff0c 对连续的黑 xf
  • 浅析洛谷P4924(一道普及/提高-的题目)的解决方法

    题目描述 xff1a Scarlet最近学会了一个数组魔法 xff0c 她会在n n二维数组上将一个奇数阶方阵按照顺时针或者逆时针旋转90 首先 xff0c Scarlet会把1到n 2的正整数按照从左往右 xff0c 从上至下的顺序填入初
  • 判断图的连通性

    上机系统的判分功能目前还没开放 xff0c 所以以下所给代码仅供参考 xff0c 并不能保证完全正确 xff08 自己分别测试了强连通 xff0c 单向连通 xff0c 弱连通 xff0c 不连通的一个样例 xff0c 都过了 xff09
  • BMP格式详解

    BMP xff08 全称Bitmap xff09 是Windows操作系统中的标准图像文件格式 xff0c 可以分成两类 xff1a 设备相关位图 xff08 DDB xff09 和设备无关位图 xff08 DIB xff09 xff0c
  • 标准数独的求解

    上机题目中有一道题目的要求是通过编程实现数独的求解 xff0c 然后想起了初三去后来所在的高中面试提前录取的时候里面的压轴题便是数独 xff0c 当时做了好长时间也没搞出来 xff0c 我还记得监考老师当时和我说 xff1a 做不出来就别勉
  • 利用定义求解传递闭包的关系矩阵

    题目描述 给定有限集合上二元关系的关系矩阵 xff0c 利用传递闭包的定义式 xff08 不是warshall算法 xff09 求其传递闭包的关系矩阵 源代码 span class token macro property span cla
  • 【Android】解决Expecting member declaration

    问题截图 刚刚安装的android studio安装完成就出现异常错误 原因 新建project的时候 xff0c language项选错了 xff0c 应选java 解决错误的办法 新建一个Project的时候 xff0c Languag
  • 矩阵乘法的实现(一般形式及单个矩阵的n次幂)

    目录 一般矩阵乘法实现矩阵的n次幂的实现 一般矩阵乘法实现 题目描述1 给定m k的布尔矩阵A xff0c 和k n的布尔矩阵B xff0c 求布尔矩阵的乘积AB 源代码1 span class token macro property s

随机推荐

  • 根据给出的关系矩阵,判断该关系所具有的特性

    目录 自反性与反自反性的判断对称性与反对称性的判断传递性的判断 自反性与反自反性的判断 关系R是自反的 xff0c 当且仅当其关系矩阵的主对角线上元素都为1 xff1b 关系R是反自反的 xff0c 当且仅当其关系矩阵的主对角线上元素都为0
  • 输出所有满足条件的关系

    目录 for循环解决简单问题调用库函数解决全排列问题 for循环解决简单问题 题目描述 源代码 span class token macro property span class token directive keyword inclu
  • 按字典序输出给定序列

    上机题目里面有不少挨着的相似的题 xff0c 下面所给的这两道偏简单 xff0c 就介绍一下用python和c实现的代码 题目描述 python实现的代码用到了sorted函数 xff0c 该函数在python3里面有三个参数 xff0c
  • 求给定图中某两点之间某一长度的路径条数

    无向图的一道例题 输出c到d长度为以下长度的路径条数 xff1a 源代码 span class token macro property span class token directive keyword include span spa
  • 洛谷题目CF96B Lucky Numbers的分析

    题目描述 xff1a 佩佳喜欢幸运数字 每个人都知道 xff0c 如果正整数的小数表示不包含除4和7以外的数字 xff0c 那么它们是幸运的 例如 xff0c 数字47 744 xff0c 4是幸运的 xff0c 5 xff0c 17 46
  • VMware Player 虚拟机中音乐播放无声音 问题

    虚拟机中安装的Win7 xff0c 音乐播放无声音 解决办法 xff1a VMware Player 右下角 Sound Card gt connect 即可解决
  • 解决M1芯片 MAC 下 Goland(Intellij系列都适用) 无法 Debug 的问题

    解决M1芯片 MAC 下 Goland xff08 Intellij系列都适用 xff09 无法 Debug 的问题 解决M1芯片 MAC 下 Goland xff08 Intellij系列都适用 xff09 无法 Debug 的问题报错信
  • Java例15.13——使用MVC结构计算三角形面积

    MVC是一种通过模型 视图 控制器构造一个软件或组件的理想办法 在例15 13中首先编一个封装三角形的类 xff0c 然后再编写一个窗口 要求窗口使用3个文本框和1个文本区为三角形对象中的数据提供视图 xff0c 其中3个文本框用来显示和更
  • 网卡远程唤醒功能

    远程唤醒功能配置文档 功能简介 网络唤醒功能可以让用户从一个局域网或者是跨网络环境中远程管理一台或者是多台计算机的开关机状态 下面是在ubuntu桌面版上实现远程唤醒功能的设置步骤 第一步 xff1a 计算机BIOS设置 在计算机开机时按F
  • Python 典藏篇-Microsoft Visual C++ 14.0 is required,官方vc++运行库工具一键式解决!

    Python 典藏篇 Microsoft Visual C 43 43 14 0 is required xff0c 官方vc 43 43 运行库工具一键式解决 xff01 前言 xff1a error Microsoft Visual C
  • LwIP在stm32上的无操作系统移植

    LwIP是一个轻型IP协议 xff0c 有无操作系统的支持都可以运行 这里的移植是无操作系统移植 LwIP虽然是一个轻型的IP协议 xff0c 但是TCP IP基本功能都有 而且占用的资源不多 xff0c 非常适合用于嵌入式系统 移植的平台
  • HTML5初体验——蛮神奇的

    记得去年在一个公司实习的时候 xff0c 听当时的领导说起过HTML5 xff0c 当时就大体了解了一下 知道了是新的下一代HTML的新标准 xff0c 去掉了HTML4中的一些标签 xff0c 扩展了一些标签内容 其他的就没有继续深入的去
  • Serilog初识(一)————分别Console、Web程序简单使用Serilog

    Serilog简介 Serilog是 NET应用程序的诊断日志库 它易于设置 xff0c 具有干净的API xff0c 并可在所有最新的 NET平台上运行 虽然它在最简单的应用程序中也很有用 xff0c 但Serilog对结构化日志记录的支
  • intellij idea 开发中,创建Maven项目中的子模块以及相关错误解决

    现在开发 xff0c 很多企业都用Maven来进行项目构建 xff0c 关于Maven的优点 xff0c 本文在此不再赘述 而平时我们学习或者做练习基本用到的都是 单项目 单模块模式 xff0c 即一个Maven项目仅包含一个模块 xff0
  • Windows server 2012 出现大量无名已断开连接用户解决办法

    打开cmd命令窗口 xff0c 执行 taskkill f im winlogon exe t
  • 关于HDFS Balancer的一些小技巧

    关于HDFS Balancer的一些小技巧 前言正文原因分析Balancer工具做均衡带宽设置限定均衡范围参数调优 结语 前言 使用HDFS的过程中 xff0c 难免会出现数据不均衡的情况 xff0c 直观表现就是有的服务器磁盘使用率高的吓
  • 【安全】Goby使用初探

    Goby使用初探 基础配置语言设置npcap安装 使用记录端口扫描 基础配置 语言设置 这里使用的环境是Windows10 64机器 xff0c 下载的方式不再多说 xff0c 直接官网无脑下载即可 xff0c 解压即用 xff0c 不需要
  • 【LDAP】在Centos7环境搭建LDAP服务端

    在Centos7环境搭建LDAP服务端 前言正文OpenLDAP介绍LDIF文件书写规则OpenLDAP部署安装服务配置ldap修改管理员密码初始化配置直接修改配置文件 不建议 使用ldapmodify 建议 添加模式其他配置修改修改服务端
  • 【HDFS】JN回滚大量edit日志导致Namenode主备切换的故障记录

    JN回滚大量edit日志导致Namenode主备切换的故障记录 前言正文问题排查调度服务状态HDFS服务状态 问题分析NameNode日志JN服务器主机指标JN日志 故障恢复 结语过程复盘思考 前言 集群大了 xff0c 这莫名其妙的问题就
  • 【Linux】关于我删文件力度过大导致IO占用太高的解决思路

    关于我删文件力度过大导致IO占用太高的解决思路 前言正文现象描述问题分析处理过程nice命令限制优先级ionice命令限制改造perl脚本 结语 前言 书接上回 xff0c 前两天刚找到删文件性能比较OK的方式后 xff0c 测试没啥问题就