我的编程空间,编程开发者的网络收藏夹
学习永远不晚

阿里云ECS排查CPU数据分析

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

阿里云ECS排查CPU数据分析

一、背景和现象

初创公司,架构lanmp,web前端和后端分开服务器,业务驱动主要是nginx和apache,nginx主要是处理静态文件和反向代理,前后端、搜索引擎、缓存、队列等附加的服务都是用docker容器部署。因为比较初级,上传文件和采集文件都是直接写在硬盘上,涉及到的目录共享,就在其中一台服务器存储并且nfs共享。我们暂且分为ECS1(apache1)、ECS2(apache2)、ECS3(nginx)。某天网站业务中断,但是没有报错。一直在等待响应,默认响应超时是一分钟,所以很基础高可用没有起到作用。中断10分钟左右,重启服务,提示“open too many files”,但是lsof统计没几个。因为初级处理不了,所以直接重启服务器,一段时间后一切恢复正常,可是第二天又来一次这种情况。

二、第一次出现后的排查思路

本来第一次发现这种问题的时候就要追查原因了,看了一下zabbix监控图像其中断了十分钟,包括网络、内存、CPU、硬盘、IO等监控数据。首先想到的是网络问题,结论是zabbix-servert获取不到了zabbix-agent采集的数据,估计就是网络不通了。

但是,这个结论站不住脚,因为我本身通过ssh登录服务器,并且命令输入无卡顿,不至于头文件都传不过来。后来一看阿里云的云监控,上面有数据,似乎也可以佐证网络这个说法,因为云监控是阿里云内部的监控,可以内网获取到监控数据。直到看CPU的使用率这项,发现有一段时间的CPU使用率100%。并且我重启的时候CPU恢复正常,不能说网络一定没问题,但系统肯定有问题。也可以解释因为CPU使用已经是100%,zabbix-agent和根本不能正常运行,所以没有监控数据。因为这个公司全部都是云服务器,没有使用IDC所以我们也没有安装smokeping来监控,接着我们就不把重心在网络上了。

目前掌握的信息就是:在毫无征兆的情况下,CPU暴涨到100%,重启之前一直保留,重启之后恢复原样。匆忙之中又看了一下系统各日志,因为太匆忙,没有总结,没有找到什么有价值的东西。现在有下面几种猜想:第一,程序的bug或者部署不当,触发之后耗尽资源。第二、docker容器的bug。第三、网络攻击。第四、病毒入侵。第五、阿里云方系统不稳定。

小总结了一下,现在问题还没有找出来。下次还有这个问题的可能,所以先尽量防范,但是又不能重启一刀切。所以在zabbix上面设置了自动化,当检测到ECS1获取不到数据的时候马上操作ECS3标记后端为ECS1的apache为down。保留异常现场。(请求停止的时候,CPU100%还在)

三、现场排查

1、相应的排查计划

(想到这些信息需要获取的,实际上没有严格按照这样的步骤)

1)用htop和top命令监控CPU、内存使用大的进程。先看看哪个进程消耗资源较多,用户态、内核态、内存、IO……同时sar -b查io的历史定时抽样。

2)统计tcp连接数,看看有没有DDOS攻击。netstat -anp |grep tcp |wc -l 。用iftop-i eth1看看通讯。同时用tail -n 1200 /var/log/messages查看内核日志。

3)用pstree查看打开进程,ps aux|wc-l看看有没有特别多的进程。虽然zabbix监控上说没有,但是我们要检查一下看看有没有异常的进程名字。

4)查看全部容器的资源使用docker stats $(docker ps -a -q),看看能不能从容器上排查。

5)有了“too many open files”的启发,计算打开文件数目lsof|wc -l,根据进程看看ll /proc/PID/fd文件描述符有没有可疑的打开文件、文件描述符。

6)关于用lsof打开文件数找到的线索,排序打开文件找出进程号 lsof -n|awk '{print $2}'|sort|uniq -c|sort -nr|more

7)关于用lsof打开文件数找到的线索,用lsof -p PID查看进程打开的句柄。直接查看打开的文件。

8)启动容器的时候又总是“open too many files"。那就是打开文件数的问题,因为CPU的使用率是CPU的使用时间和空闲时间比,有可能因为打开文件数阻塞而导致CPU都在等待。针对连接数的问题,大不了最后一步试试echo 6553500 > /proc/sys/fs/file-max 测试打开文件对CPU的影响。

9)玩意测出来了消耗CPU的进程,可以使用strace最终程序。用户态的函数调用跟踪用「ltrace」,所以这里我们应该用「strace」-p PID

10)从程序里面看到调用系统底层的函数可以跟踪。跟踪操作 strace -T -e * -p PID,主要看看代码调用的函数有没有问题。

2、现场排查

第二天同样时间,ECS果然暴涨了CPU。这是时候zabbix的工作如希望进行保留了一台故障的ECS1给我。

1)用htop看到资源使用最大是,搜索引擎下我写的一个判断脚本xunsearch.sh。脚本里面很简单,判断索引和搜索服务缺一个就全部重启。就当是我的容器有问题我直接关掉搜索引擎容器。httpd顶上,我又关掉apache容器。rabbitmq相关进程又顶上。这时候我没心情周旋了,肯定不也是这个原因。sar -b查看的历史io也没有异常。

2)统计tcp连接,几百。先不用着重考虑攻击了。用tail -n 1200 /var/log/messages查看内核日志,是TCP TIME WAIT的错误。可以理解为CPU使用100%,程序无响应外面的tcp请求超时。这是结果,还是没有找到根本原因。

接着往下看系统内核日志,发现了和“open too many files”呼应的错误,“file-max limit 65535 reached”意思是,已到达了文件限制瓶颈。这里保持怀疑,继续收集其他信息。

3)查看进程数量,数量几百。列出来也看到都是熟悉的进程,可以先排除异常进程。

4)监控容器的资源使用,里面很不稳定,首先是xunsearch容器使用80%的CPU,关掉xunsearch,又变成了其他容器使用CPU最高。很大程度上可以排查容器的问题和执行程序的问题。

5)查看了最大连接数cat /proc/sys/fs/file-max是65535但是用lsof查到的连接数是10000多,完全没有达到连接数。

6)各项参数都正常,现在聚焦在打开的文件数这个问题上面。也可以用另外同一种方式查看一下内核统计文件 /proc/sys/fs/file-nr,比较一下差异,看看能不能找出问题。cat了一下,打开文件数是66080,果然超了!内核日志就以这个为标准。

但是看lsof怎么统计不出来,ll /proc/PID/fd也没几个。这个问题放在后面,先按照步骤echo 6553500 > /proc/sys/fs/file-max给连接数提高到100倍,CPU果然降了下来。原因确认了,但是必须找到根源,为什么忽然有这么大的打开文件数。关掉全部docker容器和docker引擎,打开文件数是少了一点,但是仍然在65535差不多。我就先排除一下业务的影响,把ECS3的nginx直接指向视频ECS2的apache,就等同于在ECS2上实现了ECS1的场景。查看一下ECS2的句柄数,才4000多,排除了业务相关应用对服务器的影响。那就能下个小结论,ECS1被神秘程序打开了6万多句柄数,打开业务就多了2000多的句柄数,然后就崩溃了。不过这个现象有点奇怪,ECS2和ECS1在一样的机房一样的配置一样的网络环境,一样的操作系统,一样的服务,一样的容器,为什么一个有问题,一个没问题呢?不同的只是有一台是共享nfs。难道是静态文件共享了,其他人读了,也算是本服务器打开的?

7)现在程序找不到,没法继续lsof -p了。排查之前的猜想。带着排查得到对的结论往下想。

程序的bug和部署不当,那是不可能的,因为主要问题来自于打开句柄数,当部署到ECS2那里,一切正常。docker容器的bug,那也不可能的,每个都是我亲自写脚本,亲自编译,亲自构建的,关键是我关掉了docker容器和引擎都没有很大改善。网络攻击也排除,因为网络连接数没几个,流量也不变。那就只剩下病毒入侵也不是,没有异常进程。考虑到ECS的稳定性问题了。这方面就协助阿里云工程师去排查。

8)阿里云工程师用的排查手段和我差不多,最终也是没能看到什么。也只是给了我一些治标不治本的建议。后来上升到专家排查,专家直接在阿里云后端抓取了coredump文件分析打开的文件是图片,程序是nfsd。

好像印证了我刚才后面的猜想,应该就是ECS1使用了nfs共享其他服务器打开了然后算在ECS1头上。那问题又来了,我们的业务已经到达了可以影响服务器的程度吗?

9)既然问题解决到这一步,先不管程序有没有关闭打开的文件和nfs的配置。我们架构上面的图片应该是归nginx读取,难道是linux的内存机制让它缓存了。带着缓存的问题,首先去ECS3上释放内存echo 3 > /proc/sys/vm/drop_caches,释放之后,发现没什么改善,有点失落。总是觉得还有一台后端是PHP主导,但是逻辑上是写入,没有打开文件之说。后来从程序员中了解到,PHP也有打开图片。我猛然去ECS2释放一下内存,果然,句柄数降下来。(这里大家一定有个疑问,为什么我直接想到内存缓存而不是目前打开的文件呢。其一,这是生产环境,web前端只有一个,不能乱来停服务。其二,第一次遇到问题的时候,重启之后没有问题,过了一天之后积累到一定的程度才爆发,这里已经引导了我的思路是积累的问题,那就是缓存不断积累了)

10)因为ECS2的调用ECS1的nfs共享文件,所以lsof也有读不到那么多句柄数的理由。如果说是nfs的服务本身就有缓存,导致问题的话,我查看了配置文件,还是默认值允许缓存,30S过期,根本不会因为nfs的缓存造成打开文件过多。如果我们的后端程序打开之后没好好处理的话,那倒有可能。然后尝试排除:我改了ECS3的配置,使程序只读ECS1后端,从ECS1上面却看不到有什么异常表现,说明PHP程序已经好好处理了打开的文件。也不是docker挂载了nfs的共享的问题,因为nginx也有挂载。排查到这里也很大程度上解决问题,而且缓存了nfs的全部共享文件,句柄并没有增加,也算合理,所以就增加了打开文件数的限制。

11)现在排查的结果是跟后端和nfs共享有关。就是说,后端挂载了nfs的网络共享,被程序读取。而程序释放之后,在正常背景的硬盘文件是没有缓存的。但是在nfs挂载的环境下,缓存并没有得到释放。

12)总结:很多问题的排查和我们的猜想结果一样,但是有些例外的情况。比如这次我想到的原因都一一排除,但是问题也是在一步步排查中,逐步被发现的。

以上就是阿里云ECS的CPU100%排查分析的详细内容,更多关于阿里云ECS的CPU100%排查的资料请关注编程网其它相关文章!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

阿里云ECS排查CPU数据分析

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

如何查看阿里云ECS的CPU使用情况数据表

阿里云ECS(ElasticComputeService)是阿里云推出的一种弹性计算服务,可以提供高性能、可扩展的计算能力。在使用ECS的过程中,了解和监控CPU使用情况是非常重要的,可以及时发现和处理性能问题。本文将详细讲解如何查看阿里云ECS的CPU使用情况数据表。一、查看阿里云ECS的CPU使用情况数据表登
如何查看阿里云ECS的CPU使用情况数据表
2023-11-08

阿里云ecs云盘数据查看

简介阿里云ECS(ElasticComputeService)是一种灵活可靠的云计算服务,提供了强大的计算能力和存储资源。其中,ECS云盘是阿里云ECS的重要组成部分,用于存储操作系统、应用程序和数据。对于用户来说,了解如何查看ECS云盘的数据是非常重要的,本文将介绍一种简单而有效的方式来实现这一目标。查看ECS云盘数
阿里云ecs云盘数据查看
2023-12-26

阿里云ECS挂载数据盘价格分析

随着云计算技术的不断发展,越来越多的企业和个人选择将数据存储在云端。阿里云作为国内领先的云计算服务提供商,其ECS(ElasticComputeService)服务备受用户青睐。然而,用户在使用ECS过程中可能会遇到数据存储问题,此时需要挂载数据盘。本文将详细分析阿里云ECS挂载数据盘的价格。一、阿里云ECS挂载
阿里云ECS挂载数据盘价格分析
2023-10-30

阿里云数据库市场排名及产品分析

阿里云数据库市场排名一直是云计算领域的关注焦点。本文将对阿里云数据库市场排名进行详细分析,同时介绍其主要产品特点和优势。一、阿里云数据库市场排名根据最新的市场研究报告,阿里云数据库市场排名稳居全球前列。在全球数据库市场份额中,阿里云数据库的市场份额已超过10%,在中国市场中更是占据主导地位,市场份额超过50%。这
阿里云数据库市场排名及产品分析
2023-11-01

深度解析阿里云ECS数据库IO

随着云计算技术的发展,阿里云ECS数据库已经成为企业级应用的重要组成部分。然而,数据库IO性能的问题一直是困扰企业用户的一大难题。本文将深入解析阿里云ECS数据库IO,为企业用户提供参考和指导。正文:一、什么是数据库IO?数据库IO是指数据库在执行各种操作时,需要从磁盘上读取或写入数据的过程。在这个过程中,数据的
深度解析阿里云ECS数据库IO
2023-10-31

阿里云ecs带数据库

简介阿里云ECS(弹性计算服务)是阿里云提供的一种弹性、可靠、安全的云计算服务,它可以满足不同规模企业的需求。而数据库则是应用系统的重要组成部分,用于存储和管理数据。本文将介绍如何在阿里云ECS上搭建数据库,并提供一些实际案例来展示其优势。带数据库的阿里云ECS的优势1.弹性和可靠性阿里云ECS提供了灵活的实例规格选择
阿里云ecs带数据库
2024-01-21

阿里云ecs连数据库

简介阿里云ECS(ElasticComputeService)是阿里云提供的一种弹性计算服务,它可以帮助用户快速创建和管理虚拟机实例。在使用ECS的过程中,连接数据库是非常常见的一项操作。本文将介绍如何通过阿里云ECS连接数据库。连接数据库的方法1.使用命令行工具连接数据库首先,我们需要下载并安装MySQL命令行工具,
阿里云ecs连数据库
2024-01-22

阿里云服务ECS的优势分析

阿里云服务ECS(ElasticComputeService)是阿里巴巴集团旗下的云计算服务平台,为企业和个人提供高效、安全、可靠的计算资源。本文将重点介绍阿里云服务ECS的优势,并通过实例进行详细说明。1.弹性扩展和高可用性阿里云服务ECS提供了弹性扩展的能力,可以根据业务需求自动调整计算资源。无论是面对突发的
阿里云服务ECS的优势分析
2024-01-19

阿里云ecs数据库和阿里云数据库,访问速度

简介在云计算领域,阿里云作为国内领先的云服务提供商,提供了多种数据库解决方案,其中包括阿里云ECS数据库和阿里云数据库。本文将对这两种数据库的访问速度进行比较,帮助用户选择适合自己的数据库方案。阿里云ECS数据库阿里云ECS数据库是基于阿里云服务器实例的数据库解决方案。通过将数据库软件安装在阿里云服务器上,用户可以享受
阿里云ecs数据库和阿里云数据库,访问速度
2024-01-20

阿里云数据库CPU规格详解

阿里云数据库是阿里巴巴推出的一款高性能、可扩展的企业级云数据库产品。其CPU规格是决定数据库性能的关键因素之一。本文将详细介绍阿里云数据库的CPU规格。一、阿里云数据库CPU规格概述阿里云数据库提供了多种不同的CPU规格,包括CPU型号、CPU核数、CPU频率和内存带宽等。不同的CPU规格适用于不同的业务场景和需
阿里云数据库CPU规格详解
2023-10-30

阿里云服务器ECS年价格分析

本文将详细介绍阿里云服务器ECS的价格,包括不同规格的服务器、不同的购买期限和不同的计费模式。同时,我们还将对比其他云服务提供商的价格,以帮助读者更好地理解阿里云的性价比。正文:一、阿里云服务器ECS的价格阿里云的服务器产品主要有ECS实例、GPU实例和Z型服务器等,每种服务器都有不同的配置和价格。以下是一些常见
阿里云服务器ECS年价格分析
2024-01-25

阿里云ECS数据上传详解

阿里云ECS是阿里云推出的一种弹性计算服务,它提供了各种强大的计算和存储能力,能够满足用户的各种需求。本文将详细介绍如何使用阿里云ECS进行数据上传。一、准备工作在进行数据上传之前,需要先进行一些准备工作。首先,需要在阿里云ECS上创建一个实例,并且安装好必要的软件。其次,需要准备要上传的数据文件。二、上传数据文
阿里云ECS数据上传详解
2023-11-02

阿里云的云原生数据库分析

简介阿里云的云原生数据库是一种基于云计算技术的数据库服务,它提供了高性能、高可用性和可扩展性的数据库解决方案。本文将对阿里云的云原生数据库进行分析,探讨其特点、优势以及应用场景。云原生数据库的特点1.高性能阿里云的云原生数据库采用了分布式架构,可以实现水平扩展,从而提高数据库的处理能力和吞吐量。同时,它还支持多种存储引
阿里云的云原生数据库分析
2024-01-31

阿里云分析型数据库排名如何在海量数据中脱颖而出

##阿里云作为全球领先的云计算服务提供商,其分析型数据库(AnalyticDB)已经成为企业数据分析的首选工具之一。本文将探讨阿里云分析型数据库在市场上的排名情况,并介绍其核心优势以及成功案例。1.强大的计算性能和扩展能力阿里云分析型数据库基于阿里云强大的分布式计算平台,具备出色的计算性能和扩展能力。它可以轻松应
阿里云分析型数据库排名如何在海量数据中脱颖而出
2023-12-26

阿里云ECS如何备份数据库

简介阿里云ECS(ElasticComputeService)是一种弹性计算服务,提供了强大的云计算能力。在使用ECS的过程中,备份数据库是非常重要的一步,可以保证数据的安全性和可靠性。本文将介绍如何在阿里云ECS上备份数据库。步骤一:创建备份计划首先,登录阿里云控制台,进入ECS管理页面。选择需要备份的实例,点击左侧
阿里云ECS如何备份数据库
2024-01-31

阿里云服务器ecs数据传输

简介阿里云服务器ECS(ElasticComputeService)是阿里云提供的一种弹性计算服务,它提供了可靠的基础设施和高效的计算能力,使用户能够轻松构建和管理自己的应用程序。在使用ECS时,数据传输是一个重要的方面,本文将介绍如何最大化利用ECS的数据传输能力。1.使用云上网络阿里云提供了丰富的网络服务,包括专有
阿里云服务器ecs数据传输
2024-01-16

阿里云最新分析型数据库MaxCompute

随着数据量的爆炸式增长,数据分析的重要性也日益凸显。而作为数据处理的基石,数据库也逐渐成为各大企业关注的焦点。在众多数据库中,阿里云的MaxCompute脱颖而出。今天,我们就来详细了解一下这款阿里云最新分析型数据库。MaxCompute是阿里云推出的一款大规模数据处理服务,具备高度可扩展性、高性能计算和高可用性
阿里云最新分析型数据库MaxCompute
2023-12-15

阿里云数据库股票分析报告

本文将对阿里云数据库(简称:云数据库)进行股票分析报告,旨在探讨云数据库的市场趋势、公司发展和财务状况,并对其未来发展前景进行展望。具体内容:一、市场趋势云数据库作为云计算的重要组成部分,近年来发展迅速。随着数字化转型的深入,越来越多的企业开始依赖云数据库来存储和管理大量的数据。据IDC报告显示,2020年全球公
阿里云数据库股票分析报告
2024-01-24

编程热搜

目录