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

2024-01-26 18:04

本文主要是介绍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争用也会加剧,业务上表象就会“卡”的更久。

这篇关于netstat引发系统负载升高故障案例一则的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/647612

相关文章

不懂推荐算法也能设计推荐系统

本文以商业化应用推荐为例,告诉我们不懂推荐算法的产品,也能从产品侧出发, 设计出一款不错的推荐系统。 相信很多新手产品,看到算法二字,多是懵圈的。 什么排序算法、最短路径等都是相对传统的算法(注:传统是指科班出身的产品都会接触过)。但对于推荐算法,多数产品对着网上搜到的资源,都会无从下手。特别当某些推荐算法 和 “AI”扯上关系后,更是加大了理解的难度。 但,不了解推荐算法,就无法做推荐系

基于人工智能的图像分类系统

目录 引言项目背景环境准备 硬件要求软件安装与配置系统设计 系统架构关键技术代码示例 数据预处理模型训练模型预测应用场景结论 1. 引言 图像分类是计算机视觉中的一个重要任务,目标是自动识别图像中的对象类别。通过卷积神经网络(CNN)等深度学习技术,我们可以构建高效的图像分类系统,广泛应用于自动驾驶、医疗影像诊断、监控分析等领域。本文将介绍如何构建一个基于人工智能的图像分类系统,包括环境

水位雨量在线监测系统概述及应用介绍

在当今社会,随着科技的飞速发展,各种智能监测系统已成为保障公共安全、促进资源管理和环境保护的重要工具。其中,水位雨量在线监测系统作为自然灾害预警、水资源管理及水利工程运行的关键技术,其重要性不言而喻。 一、水位雨量在线监测系统的基本原理 水位雨量在线监测系统主要由数据采集单元、数据传输网络、数据处理中心及用户终端四大部分构成,形成了一个完整的闭环系统。 数据采集单元:这是系统的“眼睛”,

Hadoop企业开发案例调优场景

需求 (1)需求:从1G数据中,统计每个单词出现次数。服务器3台,每台配置4G内存,4核CPU,4线程。 (2)需求分析: 1G / 128m = 8个MapTask;1个ReduceTask;1个mrAppMaster 平均每个节点运行10个 / 3台 ≈ 3个任务(4    3    3) HDFS参数调优 (1)修改:hadoop-env.sh export HDFS_NAMENOD

性能分析之MySQL索引实战案例

文章目录 一、前言二、准备三、MySQL索引优化四、MySQL 索引知识回顾五、总结 一、前言 在上一讲性能工具之 JProfiler 简单登录案例分析实战中已经发现SQL没有建立索引问题,本文将一起从代码层去分析为什么没有建立索引? 开源ERP项目地址:https://gitee.com/jishenghua/JSH_ERP 二、准备 打开IDEA找到登录请求资源路径位置

深入探索协同过滤:从原理到推荐模块案例

文章目录 前言一、协同过滤1. 基于用户的协同过滤(UserCF)2. 基于物品的协同过滤(ItemCF)3. 相似度计算方法 二、相似度计算方法1. 欧氏距离2. 皮尔逊相关系数3. 杰卡德相似系数4. 余弦相似度 三、推荐模块案例1.基于文章的协同过滤推荐功能2.基于用户的协同过滤推荐功能 前言     在信息过载的时代,推荐系统成为连接用户与内容的桥梁。本文聚焦于

嵌入式QT开发:构建高效智能的嵌入式系统

摘要: 本文深入探讨了嵌入式 QT 相关的各个方面。从 QT 框架的基础架构和核心概念出发,详细阐述了其在嵌入式环境中的优势与特点。文中分析了嵌入式 QT 的开发环境搭建过程,包括交叉编译工具链的配置等关键步骤。进一步探讨了嵌入式 QT 的界面设计与开发,涵盖了从基本控件的使用到复杂界面布局的构建。同时也深入研究了信号与槽机制在嵌入式系统中的应用,以及嵌入式 QT 与硬件设备的交互,包括输入输出设

JAVA智听未来一站式有声阅读平台听书系统小程序源码

智听未来,一站式有声阅读平台听书系统 🌟 开篇:遇见未来,从“智听”开始 在这个快节奏的时代,你是否渴望在忙碌的间隙,找到一片属于自己的宁静角落?是否梦想着能随时随地,沉浸在知识的海洋,或是故事的奇幻世界里?今天,就让我带你一起探索“智听未来”——这一站式有声阅读平台听书系统,它正悄悄改变着我们的阅读方式,让未来触手可及! 📚 第一站:海量资源,应有尽有 走进“智听

【区块链 + 人才服务】可信教育区块链治理系统 | FISCO BCOS应用案例

伴随着区块链技术的不断完善,其在教育信息化中的应用也在持续发展。利用区块链数据共识、不可篡改的特性, 将与教育相关的数据要素在区块链上进行存证确权,在确保数据可信的前提下,促进教育的公平、透明、开放,为教育教学质量提升赋能,实现教育数据的安全共享、高等教育体系的智慧治理。 可信教育区块链治理系统的顶层治理架构由教育部、高校、企业、学生等多方角色共同参与建设、维护,支撑教育资源共享、教学质量评估、

客户案例:安全海外中继助力知名家电企业化解海外通邮困境

1、客户背景 广东格兰仕集团有限公司(以下简称“格兰仕”),成立于1978年,是中国家电行业的领军企业之一。作为全球最大的微波炉生产基地,格兰仕拥有多项国际领先的家电制造技术,连续多年位列中国家电出口前列。格兰仕不仅注重业务的全球拓展,更重视业务流程的高效与顺畅,以确保在国际舞台上的竞争力。 2、需求痛点 随着格兰仕全球化战略的深入实施,其海外业务快速增长,电子邮件成为了关键的沟通工具。