lsof命令导致CPU负载异常的问题总结

为采集生产服务器端口信息而批量部署的自检脚本,在连接数较大的服务器上因使用netstat和lsof命令导致CPU负载激增。本文分析了问题原因并提出了改进措施。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

出于安全及统计需要,运营系统需要采集所有生产服务器的对外端口开放情况。
4月27日凌晨,在近万台生产服务上批量推送了端口自检及扫描脚本,初期观察无异常。下午收到反馈有部分机器因为losf命令导致CPU负载很高,登录到机器上发现是自检脚本调用netstat及lsof命令引起单颗CPU负载过高。
于是紧急回退脚本,同时向运维同事要了一台连接数较大的机器测试,测试结果显示在连接数非常大时lsof及netstat命令会引起CPU占用异常。

这里之所以会调用lsof命令是为了获取绑定在指定端口上的进程名称。
自检脚本通过 netstat -lpn –inet 命令获取本机开放的端口列表,指定-p选项获取进程ID及名称。如果进程获取失败,会尝试通过lsof –i 命令获取绑定在端口上的进程名称。
当连接数较大时(超过10K),netstat及lsof命令因为要检索所有网络连接从而导致极高的CPU消耗。
显然,在连接数较大的机器上,类似netstat及lsof的命令应该是尽量避免使用的。

针对该问题,总结如下:
1、对批量部署的脚本要经过组内多人check之后方可上线,这样可以集思广益,避免因为开发人员考虑不周导致的代码故障。
2、脚本灰度发布时,尽量按机房及IP进行覆盖,以避免因业务差异导致灰度阶段无法及时暴露问题。以本次脚本为例,上线前按业务灰度时一直未发现异常,但批量更新后在连接数较高的机器上就出现了负载问题。这是因为按业务灰度时涉及的机器连接数都不高以致问题迟迟未能暴露。
3、对运营系统的脚本及程序进行足够的监控,以便及时发现问题。本次问题就是在运维同事反馈后才发现,暴露了支撑系统对自身脚本监控的不足。
4、脚本或程序批量上线前就做好一旦出现故障时的应对策略,以便在异常发生时能够及时处理,把对业务的影响降到最低。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值