跳到主要内容

那个查句柄的脚本,AI 写得比我细

夜班大鹏
夜班大鹏

· 阅读约 3 分钟

凌晨三点刚过,告警消停了,写点上周的事。

上周三,不对,上周四吧,白班交接过来一台机器,跑报表的那台,/data 满了,98%。白班的兄弟查了大半天,du -sh 一层层数下来加起来才两百多G,盘是1T,差出来的那几百G不知道去哪了。交接单上就写了一行"疑似磁盘统计异常,待夜班跟进",我看这行字就知道是什么事了,句柄没释放,文件删了进程还攥着不放。

这活儿我干过几回,但每次都得手查。就是 /proc 底下一个个进程翻 fd,readlink 看看是不是带 (deleted) 的,再看大小。那台机器上三十多个进程,一个个翻得半个来小时,眼睛都花。

那天我就想,让 AI 写个脚本吧,这种体力活正合适。需求我说得挺糙的,就说遍历 /proc 下面所有进程的 fd,把指向已删除文件的挑出来,按占用大小排个序。

它给我的第一版,说实话有点超出我预期。它不光写了主体逻辑,还加了几样我自己都没想到的:一个是权限不够的进程直接跳过不报错,我之前手写的那个老脚本,碰到没权限的就整个退出了,得手动改;一个是它把每个进程的启动时间也带出来了,说这样方便判断哪个是老进程,这个我真没想过,但确实有用,老进程基本就是元凶;还有它给结果分了两种输出,默认是给人看的表,加个参数出 JSON,方便后面接监控。

不过第一版是跑不起来的。它用 lsof 拿句柄,我们那台机器上压根没装 lsof,内网的源又是断的,装不上。这个它不知道,它也不知道我们内网进不了外网。我跟它说了一句机器上没有 lsof,python3 的库也不全,它就把实现改成纯遍历 /proc,一个外部依赖都不用了。改完跑起来是好的。

结果查出来一个 java 进程,攥着四百多个G的已删日志不放,就是白班那边上个月把日志文件 rm 了,进程没重启,一直挂着,一天天涨。凌晨四点四十我重启的那个进程,等它跑起来又盯了二十分钟,盘下去了。

这事要说感想,也没什么感想。AI 快是真快,我描述需求那一分钟,顶我之前写半小时。但它不知道我机器上有什么没什么,lsof 这种事它不问我它永远不知道,所以还是得人在现场。不过要说细,它写脚本的时候想得比我周全这个事,我认;权限那事我认栽,启动时间那个我是真没想到。

说到这个,我这两天在把之前攒的脚本一个个过一遍,让它帮我加这种"想周全点"的地方。翻着翻着发现我好多老脚本都挺糙的,能跑,但脆。

那个脚本我留下了,叫 chkdel.sh,扔在工具箱里,以后哪台机器满了我直接 scp 过去跑。

咖啡第四杯了。先这样,五点半还有个巡检,眯二十分钟。

夜班大鹏
夜班大鹏

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

查看主页 →