最近一段时间遇到了两起有意思的故障,现象都是网络掉包或网络断开,不过这些只是表面现象,引起现象出现的本质才是我们需要关注的重点:

案例1:

平台   :VMware平台

操作系统 :Windows Server 2008 R2

现象描述 :Zabbix监控和开发人员反馈数据库服务器出现偶尔掉包的现象。仅仅从掉包现象来分析,无法发现任何规律。

分析过程 :系统管理员在排除网络设备故障后,在分析过程中,发现服务器的内存使用率非常高,而系统可用内存非常低;进一步分析,发现服务器内存32G,SQL Server设置的最大服务器内存为28G,但是在任务管理器中发现SQL Server消耗的内存大于28G,接近了30G。 这个是一个非常可疑的现象,于是我检查了一下告警日志,还真的发现了一些蛛丝马迹,如下截图所示:

那些额外内存消耗是因为这台数据库服务器部署了一些.NET 程序集造成的。数据库由于内存压力,将CLR代码编写的一些.NET 程序集(.NET assemblies)unload以便释放一些内存资源。因为个人拖拉缘故,当时对程序集做做了一些分析和截图,但是拖到现在才总结这篇博客,很多资料和截图都找不到了。分析过后,我将SQL Server的max server memory (MB)调整为27648MB,监控分析发现,掉包现象消失了。这个是一个让我比较在意的现象。也就是说内存压力会造成网络掉包现象。以前觉得只有CPU有压力的时候,引起掉包现象,原来内存压力也会导致这些现象出现!

案例2:上周五,一个数据库服务器突然出现短暂几分钟的网络中断情况。

平台   :VMware平台

操作系统 :Windows Server 2012

现象描述 :服务器出现短暂几分钟的网络中断,应用程序和监控工具都无法访问服务器

分析过程 :如下所示,Zabix监控发现出现几分钟网络中断的情况,在那个时间点, 服务器CPU出现了100%的情况,最终发现是一个复杂的用户SQL导致服务器CPU彪增!

后面分析分析引起CPU彪增的原因是一个SQL语句,这个SQL的复杂度也确实震惊了我一下。实在太长、太复杂了。这里也不方便展示。

那么有意思的问题来了,如果CPU繁忙或内存压力到会导致网络掉包,那么正确、合理的解释是? 本人在网络这块的知识实在欠缺,只能求助搜索引擎。

这篇文章“浅谈UDP(数据包长度,收包能力,丢包及进程结构选择)”有一些解释(当然,文章主要介绍UDP掉包,而且是Linux平台,个人觉得完全可以忽略这些,借鉴其分析),摘抄如下:

2、服务器负载过高,占用了大量cpu资源,无法及时处理linux内核socket缓冲区中的udp数据包,导致丢包。

一般来说,服务器负载过高有两个原因:收到的udp包过多;服务器进程存在性能瓶颈。如果收到的udp包过多,就要考虑扩容了。服务器进程存在性能瓶颈属于性能优化的范畴,这里不作过多讨论。

3、磁盘IO忙

服务器有大量IO操作,会导致进程阻塞,cpu都在等待磁盘IO,不能及时处理内核socket缓冲区中的udp数据包。如果业务本身就是IO密集型的,要考虑在架构上进行优化,合理使用缓存降低磁盘IO。

这里有一个容易忽视的问题:很多服务器都有在本地磁盘记录日志的功能,由于运维误操作导致日志记录的级别过高,或者某些错误突然大量出现,使得往磁盘写日志的IO请求量很大,磁盘IO忙,导致udp丢包。

对于运维误操作,可以加强运营环境的管理,防止出错。如果业务确实需要记录大量的日志,可以使用内存log或者远程log。

4、物理内存不够用,出现swap交换

swap交换本质上也是一种磁盘IO忙,因为比较特殊,容易被忽视,所以单列出来。

只要规划好物理内存的使用,并且合理设置系统参数,可以避免这个问题。

另外“Causes of Packet Loss and How to Fix Them”这篇文章中,有个介绍,就是通信设备由于峰值缘故,导致设备的CPU或内存无法处理额外的通讯量,从而导致掉包。那么服务器由于CPU或内存资源被耗尽,导致其无法及时处理通信包,由于内部机制缘故,导致这些包被丢弃。这样解释也能解释得通。当然深层次的解释肯定有,可惜网上没有看到这方面的分析文章,个人网络这方面知识欠缺,积累不足,只能作罢!

2. Device (Router/Switch/Firewall/etc.) Performance

If your bandwidth is adequate, you can still face an issue if your router/switch/firewall is not able to keep up with the traffic.

Let’s take a scenario where you recently upgraded a link from 1Gb to 10Gb because traffic reports show that you were at full capacity during peak hours of the day. After the upgrade, your charts show the bandwidth going up to 1.5Gb, but you are still experiencing network performance issues. The issue could be that the device is not able to keep up with the traffic, and you have hit the maximum throughput your hardware can provide.

The traffic is reaching the device, but the device’s CPU or memory is maxed out and not able to handle extra traffic.

This results in packet loss for all traffic that is beyond the capacity of the box.

Remediation

You must replace the hardware with a new appliance that can handle your maximum throughput, or potentially cluster additional hardware to increase your throughput.

 

参考资料:

https://hexnet.jimdo.com/2013/12/16/%E7%BD%91%E7%BB%9C%E5%81%A5%E5%BA%B7%E6%A3%80%E6%9F%A5%E7%9A%84%E4%BA%94%E5%A4%A7%E5%85%B3%E6%B3%A8%E7%82%B9/

https://cloud.tencent.com/developer/article/1021196

https://www.annese.com/blog/what-causes-packet-loss

服务器CPU繁忙或内存压力引起网络掉包的浅析与总结相关推荐

  1. 服务器升级内存跟cpu之后性能更差,云服务器cpu重要还是内存重要

    云服务器cpu重要还是内存重要 内容精选 换一换 Windows操作系统云服务器蓝屏,如图1所示.使用了来源不明的第三方软件.CPU占用过高导致.因为误操作或者病毒引起的系统文件.注册表损坏.操作系统 ...

  2. java 监控linux服务器cpu使用率、内存使用率、磁盘使用率、java进程是否存活等服务

    java 监控linux服务器cpu.内存.java进程是否存活,发现异常发送邮件提醒 前一段时间在维护一个N年前的项目,这个项目有十几个服务器,每个服务器上有十几个服务.接手后的几个星期天天有事,要 ...

  3. python 获取内存使用率_Python获取CPU使用率、内存使用率、网络使用状态 | 学步园...

    注:需要安装psutil库 源代码如下: #!/usr/bin/env python # # $Id: iotop.py 1160 2011-10-14 18:50:36Z g.rodola@gmai ...

  4. Linux服务器CPU、内存、磁盘空间、负载情况查看python脚本

    [本文出自天外归云的博客园] 网上搜,东拼西凑,组装了一个可以查Linux服务器CPU使用率.内存使用率.磁盘空间占用率.负载情况的python脚本. 脚本内容如下: # -*- coding:utf ...

  5. Linux服务器如何查看CPU使用率、内存占用情况

    作为Linux运维工程师系统维护过程中,需要我们经常查看服务器CPU使用率.内存使用率.带宽占用,从资源使用的程度分析系统整体的运行情况. 在 Linux 香港服务器上查看资源使用情况有很多命令可以参 ...

  6. 阿里云服务器cpu连续n天使用率为100%问题解决方案!

    硬件配置: 阿里云服务器(CPU:4核 内存:4GB 数据盘:450G 带宽:5Mbps).系统配置: iluckysi@ILUCKYSI-PC:/etc# cat issue Ubuntu 12.0 ...

  7. amd服务器和intel服务器性能,服务器CPU内存性能哪家强?AMD or Intel?

    原标题:服务器CPU内存性能哪家强?AMD or Intel? 基准配置和方法 MCT的一位导师在EPYC 7601.Skylake, 和Cascade Lake machines上进行了一项测试. ...

  8. 虚拟化对服务器cpu和内存的要求,如何为虚拟化部署环境选择CPU与内存?

    为虚拟化选择内存 你是不希望克扣内存的,因为耗光一台主机的第一个硬件资源是普遍的.当主机上有大量的其他可用资源(CPU.磁盘.网络等)时就没有足够的内存了,这就会限制主机上放置的虚拟机数量.虽然一些虚 ...

  9. 服务器cpu,内存正常, 部分网站打不开,提示死锁,应用程序池回收就正常,如何解决?...

    服务器cpu,内存正常, 部分网站打不开,提示死锁,应用程序池回收就正常,如何解决? 提问: 服务器\IIS和ASP问题请问下各位``网站最近每天要出现几次打不开很慢`只显示tile标题其它无,站点是 ...

最新文章

  1. 闲话WPF之二六(WPF性能优化点)
  2. 验证码的产生 python
  3. redis 6379端口telnet不通的解决办法
  4. Java微信订单查询
  5. request请求在Struts2中的处理步骤
  6. 关于openstack 专业博主地址.后续更新
  7. 电商夏季促销海报设计PSD模板,分解教你如何设计
  8. Vue3 配置代理和使用全局axios请求数据
  9. Python学习笔记 之 变量进阶
  10. S32DS中链接文件及启动代码学习
  11. 笔记本计算机摄像头怎么打开,笔记本电脑的摄像头在哪里打开(图解摄像头开启步骤)...
  12. 矩阵开根号,工作矩阵平方根
  13. Android UI 测试框架Espresso详解
  14. 氟化硼二吡咯(BODIIPY) FL炔烃/氨基/羧基/NHS脂/叠氮/酰胫/马来酰亚胺/四嗪/DBCO
  15. ctf 抓捕赵德汉_第三届网络空间安全技术大赛WriteUp(cstc2017)
  16. Kotlin 协程是个什么东西?
  17. 脉冲噪声及其消除算法(DPC)
  18. 第一行代码git上传天气项目遇到问题
  19. 【电影漫谈】点评好莱坞的导演和模式风格
  20. 解决Ubuntu 8.04下8600M GT显卡无法使用的问题

热门文章

  1. 去掉微软要求正版授权的五角星图标
  2. C语言 三子棋小游戏
  3. ISNULL和NULLIF函数
  4. =NULL和Is NULL
  5. 如果您忘记了苹果密码,如何解锁您的iPhone手机 简单操作看这里
  6. c++简单随机数的获得
  7. 计算机专业考研双非大学排名,【大学分析】去年计算机爆炸的双非浙江工业大学,今年分数大幅下降!...
  8. 基于NB-IOT特点发展方向浅析
  9. spring的spi
  10. Python 代码中三种波浪线和 PEP8