最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Linux刪文件力度過大導(dǎo)致IO占用太高的解決方案

 更新時間:2024年04月11日 10:06:46   作者:Meepoljd  
這篇文章主要介紹了Linux刪文件力度過大導(dǎo)致IO占用太高的解決方案,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教

前兩天剛找到刪文件性能比較OK的方式后,測試沒啥問題就在生產(chǎn)環(huán)境開始操練了, 雖然文件是在持續(xù)刪除著,但是跑了一段時間以后,執(zhí)勤同事找我說IO滿了,問我是不是做了啥,我上去一看還真是,然后讓我先停了:

但是文件也不能不刪,腳本還是要跑,基于這個問題,看看怎么樣控制IO又能夠持續(xù)做文件清理。

現(xiàn)象描述

先詳細(xì)描述一下問題的現(xiàn)象,我在上午9點左右把腳本起來以后,觀察了一會任務(wù)執(zhí)行,發(fā)現(xiàn)沒啥問題就做別的事情了,讓腳本一直在服務(wù)器運行,大概中午的時候,找到我說IO太高了,讓我看下,然后看IO升高和我的腳本基本是同一時間開始的,監(jiān)控圖如下,我11:30左右把腳本完全停了以后,IO就沒有再這么高了:

問題分析

我在之前的一篇文章中說到相比較而言,文件清理最快的方式是find + delete的方式,這也是我選擇的文件清理方式,但是問題就在于,使用find . -mtime +3 -type f -delete這種命令我沒法在腳本這一層對他的刪除做限制,比如刪除1000個文件休眠5秒。

這個時候想到用nice這些命令對進程優(yōu)先級做限制,嘗試限制IO的占用;或者在perl腳本中做限制,兩種方法應(yīng)該都是可行的,主要是在實際使用上是不是會有差異;

處理過程

nice命令限制優(yōu)先級

可以使用man nice查看nice命令的使用方式,還是比較簡單的:

nice命令只有一個參數(shù)-n,用來指定要設(shè)置的優(yōu)先級,可選范圍在-20到19,數(shù)字越大優(yōu)先級越低(看到一個比較有意思的理解:nice代表這個人是個好人,越nice人約好,他就越謙讓,所以優(yōu)先級越低:D)

在啟動清理命令之前加上nice -n 19就能直接指定優(yōu)先級運行了,如下:

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

根據(jù)監(jiān)控來看,似乎并沒有什么用,使用top命令看了下,優(yōu)先級是生效了的,看來這個方法不奏效。

ionice命令限制

另一個查到的方法是ionice,這個命令貌似可以直接對IO的調(diào)度策略和優(yōu)先級做限制,使用man ionice可以看到命令的詳細(xì)用法:

簡單介紹下:

參數(shù)作用取值描述
-c, --class調(diào)度類,調(diào)度方式0,1,2,30對應(yīng)none,1對應(yīng)realtime,2對應(yīng)best-effort,3對應(yīng)idle
-n對應(yīng)調(diào)度類下的級別0-7只對realtime和best-effort有效
-p指定PIDpid號指定要做調(diào)整的進程pid,如果是執(zhí)行命令,那就直接帶上命令就可以

關(guān)于調(diào)度策略的解釋:

  • idle:當(dāng)沒有其他進程請求磁盤I/O時,才會進行磁盤IO,也就是說最后考慮;
  • realtime:對磁盤進行優(yōu)先訪問,也就是說進程的IO請求會被優(yōu)先處理;
  • best-effort:該調(diào)度策略取值為0-7,數(shù)值越低,優(yōu)先級越高,內(nèi)核2.6.26之前,使用none等同于使用best-effort

具體的可以搜下IO的CFQ調(diào)度算法了解下,這里不展開討論了;

隨后測試了一下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; # 已刪除的文件數(shù),初始化為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; # 當(dāng)刪除文件數(shù)達到500個的時候,手動休眠
                    sleep($sleep_time);
                }
            }
        }
    closedir SH;
}
closedir DH;

接下來運行腳本進行清理:

再看監(jiān)控圖,終于是穩(wěn)定維持在一個水平了:

總結(jié)

雖然通過腳本的方式控制了文件清理對IO的占用,但是這算是沒辦法的辦法,若是能夠?qū)inux的IO調(diào)度策略再熟悉些,也許我能找到更好的辦法吧~

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • 利用rsync自動備份 完全配置方法 增加了ip限制

    利用rsync自動備份 完全配置方法 增加了ip限制

    利用rsync自動備份 完全配置,一些細(xì)節(jié)也做到了,對于比較熟悉rsync的朋友應(yīng)用,限制了ip相對來說安全增加了。
    2009-09-09
  • Windows 10 太難用如何定制你的 Ubuntu方法詳解

    Windows 10 太難用如何定制你的 Ubuntu方法詳解

    這篇文章主要介紹了Windows 10 太難用,如何定制你的 Ubuntu,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-08-08
  • 使用vs2019進行Linux遠(yuǎn)程開發(fā)的方法步驟

    使用vs2019進行Linux遠(yuǎn)程開發(fā)的方法步驟

    這篇文章主要介紹了使用vs2019進行Linux遠(yuǎn)程開發(fā)的方法步驟,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-01-01
  • linux編譯ko文件方式(不同內(nèi)核源碼版本)

    linux編譯ko文件方式(不同內(nèi)核源碼版本)

    文章總結(jié):作者首先嘗試編譯內(nèi)核驅(qū)動程序時遇到困難,后來通過更換內(nèi)核版本并按照步驟成功編譯出ko文件,編譯步驟包括解壓內(nèi)核源碼、配置、編譯、安裝模塊、創(chuàng)建initrd文件、更新鏡像、更改啟動文件等,此外,還介紹了如何通過Makefile編譯ko文件
    2026-01-01
  • Bash中尖括號的更多使用方法

    Bash中尖括號的更多使用方法

    這篇文章主要給大家介紹了關(guān)于Bash中尖括號的更多使用方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-02-02
  • Linux下解壓,壓縮JAR包的簡單方法

    Linux下解壓,壓縮JAR包的簡單方法

    下面小編就為大家?guī)硪黄狶inux下解壓,壓縮JAR包的簡單方法。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-12-12
  • Linux使用yum安裝lamp以及部署wordpress實踐

    Linux使用yum安裝lamp以及部署wordpress實踐

    文章指導(dǎo)如何通過yum安裝LAMP環(huán)境并部署WordPress,需關(guān)閉防火墻和SELinux,配置阿里云yum源,安裝Apache、MySQL和PHP,設(shè)置時區(qū)為上海,初始化數(shù)據(jù)庫,調(diào)整權(quán)限,部署站點后訪問驗證
    2025-08-08
  • Linux mount掛載和卸載硬盤腳本分享

    Linux mount掛載和卸載硬盤腳本分享

    本文通過腳本給大家分享了linux mount掛載和卸載硬盤的方法,非常不錯,具有一定的參考借鑒價值,感興趣的朋友一起看看吧
    2016-11-11
  • centos 修改ssh默認(rèn)端口號的方法示例

    centos 修改ssh默認(rèn)端口號的方法示例

    這篇文章主要介紹了centos 修改ssh默認(rèn)端口號的方法示例,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2019-02-02
  • linux中rmdir命令使用詳解

    linux中rmdir命令使用詳解

    這篇文章主要詳細(xì)介紹了linux中rmdir命令使用方法以及示例,十分的全面,這里推薦給想學(xué)習(xí)linux命令的小伙伴
    2015-01-01

最新評論

盐边县| 永福县| 巴林左旗| 泰顺县| 罗田县| 弋阳县| 大厂| 皋兰县| 巴楚县| 保山市| 泸水县| 镇雄县| 麻阳| 台中县| 龙陵县| 理塘县| 册亨县| 兴安县| 桐城市| 青岛市| 溧水县| 于田县| 安仁县| 株洲县| 宝丰县| 浮山县| 天全县| 高平市| 长寿区| 新化县| 博客| 衡东县| 邮箱| 万载县| 苏尼特左旗| 龙里县| 乌兰察布市| 墨江| 会昌县| 平顺县| 宁化县|