netstat引发系统负载升高故障案例一则

  关键词

  • linux、centos
  • cpu load、netstat、strace
  • 阻塞、卡顿

     There are many things that can not be broken!

     如果觉得本文对你有帮助,欢迎点赞、收藏、评论!

 在一次线上业务的阻塞故障中,发现罪魁祸首是执行了大量netstat的命令导致,进而对这次事件做了一次剖析,发现我们经常使用的netstat居然会有如此大的影响。

一、问题现象

某一天某应用反馈无法访问postgresql数据库,数据库活动连接数突增,数据库主机CPU使用率高,并且出现严重卡顿情况,主机性能各项指标飙升。数据库切换后,另一个节点同样出现相同一样故障情况。后定位发现主机有异常监控程序每分钟定时批量发起netstat查询命令,导致系统资源耗尽引发负载升高,系统卡顿现象。 

二、问题分析

当发现有这么多netstat命令时,开始追踪netstat的源头,原来是监控的进程发起。再询问监控维护人员得知,故障发生前,监控维护人员批量修改了采集脚本,修改后的程序1分钟采集一次,且每次并发执行16次netstat命令,故障同一时间点应用操作数据库并发量大,导致主机负载瞬间增长很大,主机响应慢触发一系列问题。问题的矛头指向了netstat命令,那么为何会造成如此大影响?接下来好好剖析一下:

首先了解下netstat这个工具的原理

   netstat是在net-tools工具包下面的一个工具集,用来查询网络情况,同时支持很多参数扩展查询。本次案例中,程序代码主要是批量执行了netstat -antlp命令。

通过strace追踪这条命令:

简单概括,netstat程序实际做了以下操作

1、加载一些链接库, 例如 libselinux.so.1, libc.so.6, libdl.so.2 等

2、读取 /proc/XXX/fd 文件夹下面的信息

3、读取 /proc/net/ 下的信息

4、向 kernel 发送 PF_NETLINK 类型的 socket 查询一些信息

通过查看源码:

netstat的源码是在net-tools中,可从https://www.linuxfromscratch.org/blfs/view/6.3/basicnet/net-tools.html找到下载链接

netstat命令行的入口在 netstat.c 中

代码的逻辑简单的可以概括为: 解析参数->根据参数查找显示数据。

以参数”r” 为例子(即 netstat -r 的执行方式)

读取 /proc/net/route内容,再根据文件内容格式读取数据, 格式化输出

命令最终调用的函数为 lib/inet_gr.c 中的 rprint_fib 函数。

netstat 不同的参数对应的读取方法有:

参数

读取方法

r

/proc/net/route

i

socket

t

/proc/net/tcp(6)

u

/proc/net/udp(6)

w

/proc/net/raw(6)

g

/proc/net/igmp(6)

p

启动时遍历/proc/XXX/cmdline

结论

  当netstat命令执行时,会根据执行所带的参数,依次调用函数,执行系统调用。函数执行的效率的直接会影响系统调用的时间。

  本次案例中,使用了-p参数,系统会遍历/proc/目录来完成系统调用,当系统当前进程较多时,netstat -p的执行耗时会明显升高。此时如果使用了并发进程,cpu的非自愿切换升高,导致系统整体负载短时间飙升,系统同一时间其他进程无法获取cpu资源,从而出现卡顿现象。如果此时系统其他进程同时也有并发,就会造成cpu的进程严重争用情况,系统处理能力受阻。

三、测试验证

测试主机:华为物理机

测试配置:CPU 48C

初始任务数:502

1、无负载下,单独模拟并发执行1000条netstat命令

使用-an参数,执行耗时0.189s

使用-anp参数,执行耗时6.904s,同时系统负载飙升严重,sys使用率上升,进程的非自愿上下文切换增多,系统已有卡顿现象。

对并发的netstat数量做了压测对比,测试结果如下:

命令参数

并发数量

100

300

500

800

1000

2000

an

0.014s

0.054s

0.099s

0.154s

0.189s

0.407s

anp

0.015s

1.002s

2.541s

4.654s

6.904s

19.468s

2、模拟有负载情况下,并发netstat测试

先执行1000条ping命令,系统任务数增加到1500+。/proc下文件数1500+

此时执行100条并发netstat命令时,-an的参数命令耗时没变化,-anp的参数耗时有明显增加,最大耗时已超过1s。

 对不同系统负载下,300并发netstat的测试对比

命令参数

系统进程数

500

1500

3500

5500

7500

an

0.054s

0.045s

0.071s

0.082s

0.091s

anp

1.002s

3.62s

10.783s

20.032s

31.828s

 3、对比不同命令参数下的netstat系统调用耗时

在系统进程数7500条时,netstat -p参数的系统调用耗时增加到0.18s,不加p的系统调用耗时为0.03s。随着进程数的增加,添加-p参数的netstat消耗系统cpu时间更长。

4、测试结论

   Netstat 使用-p参数时,确实会增加系统调用cpu消耗时间,系统调用的同时也会产生上下文切换,导致系统的瞬时负载上涨,进程间争用cpu明显。此时如有高并发应用,程序得不到资源会进一步恶化系统负载,cpu争用也会加剧,业务上表象就会“卡”的更久。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/349056.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

使用宝塔面板部署Node.js+Mysql服务和Vue3-Admin项目到云服务器上

准备工作 一台云服务器,可以先用免费试用一个月的服务器进行练手;我这里选择的是腾讯云的轻量云服务器; 1、在云服务器上安装宝塔面板 宝塔面板官网地址:https://www.kancloud.cn/chudong/bt2017/424209 1.1 安装Xshell脚本工…

开源CRM客户管理系统-FeelCRM

FeelCRM客户管理系统 开源项目介绍 FeelCRM客户管理系统,符合中小企业业务流程;支持线索管理、客户管理、商机管理、合同管理、审核管理等多个模块;希望能为广大中小企业以及开发者们提供一个更多的可能性;本版本是我公司跨语言…

C#,打印漂亮杨辉三角形(帕斯卡三角形)的源代码

杨辉 Blaise Pascal 这是某些程序员看完会哭的代码。 杨辉三角形(Yanghui Triangle),是一种序列数值的三角形几何排列,最早出现于南宋数学家杨辉1261年所著的《详解九章算法》一书。 欧洲学者,最先由帕斯卡&#x…

Windows10上使Git Bash支持rsync命令操作步骤

rsync命令是linux上常用的工具之一,用于远程以及本地系统中拷贝/同步文件和文件夹。 Windows Git Bash默认并不支持rsync,如下图所示: 使Git Bash支持rsync命令操作步骤: 1.从https://repo.msys2.org/msys/x86_64/ 下…

1.26寒假集训

A: 解题思路&#xff1a; 只有一行一列的时候输出1&#xff0c;多列就输出2 有多行多列的时候&#xff0c;输出4 下面是c代码&#xff1a; #include<iostream> using namespace std; int main() {long long n,m,t;cin >> t;while(t ! 0){cin >> n >&g…

java安装,从java1.8升级到java11.0,java,javac,javaw,javaws,jdk,jre

最近在学习 PyFlink&#xff0c;需要安装Java11环境&#xff0c;但是本机已经安装了java1.8&#xff0c;在升级的过程中遇到了一些问题&#xff0c;在这里记录一下。 windows下安装JDK11 下载JDK11&#xff1a;https://www.oracle.com/java/technologies/downloads/#java11-w…

【SVD生成视频+可本地部署】ComfyUI使用(二)——使用Stable Video Diffusion生成视频 (2023.11开源)

SVD官方主页 &#xff1a; Huggingface | | Stability.ai || 论文地址 huggingface在线运行demo : https://huggingface.co/spaces/multimodalart/stable-video-diffusion SVD开源代码&#xff1a;Github&#xff08;含其他项目&#xff09; || Huggingface 在Comfyui使用&…

[bat]基于msg的弹窗提示

一、方案 1、定时自动消失的弹窗 代码&#xff1a; echo off echo method 1 msg * /time:5 "123456" REM echo method 2 REM msg * "123456"pause 效果&#xff1a; 立即弹窗在5秒后消失。 2、一直存在的弹窗 源码&#xff1a; echo off REM echo m…

方法重载与方法重写差别

写在开头 请聊一聊Java中方法的重写和重载&#xff1f; 这个问题应该是各大厂面试时问的最多的话题之一了&#xff0c;它们几乎贯穿了我们日常的开发工作&#xff0c;在过往的博客中我们多多少少都提到过重载与重写&#xff0c;而今天我们就一起来详细的学习一下这二者的功能与…

【Elsevier】中科院2区SCI,仅3个月录用!接收领域广!

关注公主号【SciencePub学术】&#xff0c;发现期刊更多精彩~ 1 数据处理类SCIE&#xff08;高质量&#xff09; 【期刊简介】IF&#xff1a;6.5-7.0&#xff0c;JCR1区&#xff0c;中科院2区&#xff1b; 【出版社】Elsevier出版社 【版面情况】正刊&#xff0c;仅5篇版面…

jetson-inference----docker内运行分类任务

系列文章目录 jetson-inference入门 jetson-inference----docker内运行分类任务 文章目录 系列文章目录前言一、进入jetson-inference的docker二、分类任务总结 前言 继jetson-inference入门 一、进入jetson-inference的docker 官方运行命令 进入jetson-inference的docker d…

Github 2024-01-26 开源项目日报Top10

根据Github Trendings的统计&#xff0c;今日(2024-01-26统计)共有10个项目上榜。根据开发语言中项目的数量&#xff0c;汇总情况如下&#xff1a; 开发语言项目数量Python项目4Jupyter Notebook项目2HTML项目1Shell项目1Dockerfile项目1非开发语言项目1Go项目1Rust项目1 高级…

最小覆盖子串(Leetcode76)

例题&#xff1a; 分析: 比如现在有字符串&#xff08;s&#xff09;&#xff0c;s "ADOBECODEBANC", 给出目标字符串 t "ABC", 题目就是要从原始字符串&#xff08;s&#xff09;中找到一个子串&#xff08;res&#xff09;可以覆盖目标字符串 t &…

vue3预览pdf文件的几种方法

vue3预览pdf集中方法 方法一&#xff1a; iframe&#xff1a;这种方法显示有点丑 <iframesrc"E:\\1.pdf"frameborder"0"style"width: 80%; height: 100vh; margin: auto; display: block"></iframe>方法二&#xff1a; 展示效果&…

【C++】wxWidgets编程的程序入口点

在wxWidgets中&#xff0c;程序的入口点通过wxIMPLEMENT_APP宏定义来设置&#xff0c;该宏会扩展为一个实现了main函数或者在Windows上是WinMain函数的代码。wxIMPLEMENT_APP宏与wxDECLARE_APP宏一起使用来设置基于wxWidgets的应用程序的启动代码。 使用wxIMPLEMENT_APP宏通常是…

【AI Agent系列】【MetaGPT】9. 一句话订阅专属信息 - 订阅智能体进阶,实现一个更通用的订阅智能体(2)

文章目录 0. 前置推荐阅读和本文内容0.1 前置推荐阅读0.2 本文内容 1. 修改一&#xff1a;直接用大模型获取网页信息&#xff0c;不用爬虫程序1.1 我们要给大模型什么内容1.2 提取网页文本信息1.3 组织Action1.4 完整代码及细节注释1.5 可能存在的问题及思考 2. 修改二&#xf…

实体识别与分类方法综述

目录 前言1 实体识别简介2 基于模板和规则的方法3 基于序列标注的方法3.1 常见序列标注模型3.2 模型参数估计和学习问题3.3 常见序列预测模型 4. 基于深度学习的实体识别方法5 基于预训练语言模型的实体识别5.1 BERT、GPT等预训练语言模型5.2 解码策略 6 特殊问题与挑战6.1 标签…

视频渲染靠cpu还是显卡 会声会影视频渲染的作用是什么

视频渲染最占用的资源就是CPU&#xff0c;多核心多线程&#xff0c;这样才能渲染快。渲染可以在时间线上实时平滑预览&#xff0c;便于编辑&#xff0c;最终导出成片的时候速度也会快一些&#xff0c;渲染就是对每桢的图像进行重新优化的过程。 渲染的作用主要是能够保证使用者…

C#使用RabbitMQ-2_详解工作队列模式

简介 &#x1f340;RabbitMQ中的工作队列模式是指将任务分配给多个消费者并行处理。在工作队列模式中&#xff0c;生产者将任务发送到RabbitMQ交换器&#xff0c;然后交换器将任务路由到一个或多个队列。消费者从队列中获取任务并进行处理。处理完成后&#xff0c;消费者可以向…

outlook如何群发邮件?外贸邮件群发教程?

outlook邮箱群发邮件方法&#xff1f;outlook怎么设置邮件群发&#xff1f; 如果你正在使用Outlook&#xff0c;那么你一定想要知道如何有效地群发邮件。Outlook作为微软办公套件的一部分&#xff0c;不仅功能强大&#xff0c;而且操作简便。下面&#xff0c;蜂邮EDM就来详细讲…