跳到主要内容

那个查磁盘的脚本,比我写的强,也比我写的野

夜班大鹏
夜班大鹏

· 阅读约 3 分钟

凌晨一点五十,磁盘告警压下去了,可那台机器我心里还是没底,记一笔。

事情发生在上礼拜三,不对,上上礼拜四,11月5号吧,反正那天我值夜。3号机 /var 分区,85%、91%、93%,一轮一轮往上跳,清一遍日志掉下去,第二天又上来。白班交接单上写着“已清理,观察”。观察个屁,观察了两天还是这样。这种最烦,不是故障,是个漏水的龙头。

我自己先 du 了一遍,du 出来跟 df 差了快 40 个 G。这个我知道,文件删了,但进程还捏着句柄,空间不释放,早些年栽过。但知道归知道,要找出是哪个进程、哪根管子,我一般是 lsof 一通乱翻,翻到眼睛花。

那天我懒得翻,就把现象跟 AI 说了:df 和 du 差 40G,帮我写个脚本,把这台机器上还开着已删除文件的进程全列出来,带上文件大小,按大小排。我本来想着它给我拼个 lsof 加个 awk 就完了。

结果它给我的东西比我想的多。它不光标了进程,还把每个进程的启动时间、所属服务、还有那个文件当初大概是哪个路径,全给带出来了。更绝的是它自己加了一段,把最近 24 小时增长最快的几个目录也顺手扫了一遍。说句实话这段我压根没想到要加,可它扫出来的第二名,是我自己的日志轮转没配好,一个应用日志滚了不删,攒了 11 个 G。这个我一直盯着那 40G 的差值,忘了还有正常增长的部分。

那会儿快四点了,脚本跑完,两个问题一次都出来了,一个 kill 掉进程释放空间,一个把轮转配置改了。四点半我看 df,掉到 61%。当时还挺得意。

然后野的地方就来了。

它那段扫目录的代码,是从根上 find 开始全盘过一遍。我在 3 号机上跑的时候没多想,机器本来就忙,我以为慢点就慢点。跑到一半我瞄了一眼负载,飙到三十多。3 号机上还挂着一个报表的活儿,白班九点要用的,被我拖慢了俩小时才跑完。

第二天上午,白班兄弟在企业微信上问我,3 号机昨晚是不是出啥事了,报表晚了。我说我清磁盘呢。他说哦,就没往下问,人家也没说啥,但这话我听着不舒服。

脚本是好脚本,就是它不知道这台机器上还跑着别的东西。它不知道,我也没告诉它。这个我不怪它,怪我自己急着跑,没加 nice,没限 IO。

后来我把那段改成只扫几个指定目录,前面加了 nice -n 19,就跑不出事了。工具箱里又多一个。

说到这个,我发现我最近让它写脚本有个毛病,我描述现象的时候老想着“它能懂”,很多前提就懒得说。它懂技术,它不懂我那台机器。

先这样,困了,三点半还有个巡检。

夜班大鹏
夜班大鹏

运维,常驻夜班。凌晨的机房很安静,适合写点东西。

查看主页 →