_Linux 服务器存在某进程 CPU 过高如何追溯其问题根源?

665d0892-8c0f-eb11-8da9-e4434bdf6706.png

问题描述:

在本人运维的一个省级平台系统中,最近有用户反应系统很卡一直转圈圈. 经初步核查发现某web服务器节点存在JAVA进程cpu占比超过100%的情况。为了不影响用户使用,暂时只能采取简单粗暴的方法"重启服务器"。这其中有如下2个疑问,1 该平台web服务器有7个节点,为何只是其中一个节点无法访问会导致外网用户会觉得系统卡甚至无法访问?2 为啥cpu占比这么高,究竟是是业务的那些代码写的有问题,如何把它揪出来?

带着这两个问题我开始和身边同事沟通已经网上相关知识的搜索。

问题分析:

1 该平台web服务器有7个节点,为何只是其中一个节点无法访问会导致外网用户会觉得系统卡甚至无法访问?

我们采用的是硬件负载的方式,对于负载均衡策略有如下几种方式。

轮循均衡(Round Robin):每一次来自网络的请求轮流分配给内部中的服务器,从1至N然后重新开始。此种均衡算法适合于服务器组中的所有服务器都有相同的软硬件配置并且平均服务请求相对均衡的情况。

我们的业务web服务器都是同样配置的虚拟机,因此,我们采用了该“轮询均衡”策略。除此之外,还有如下其他策略。

权重轮循均衡(Weighted Round Robin):根据服务器的不同处理能力,给每个服务器分配不同的权值,使其能够接受相应权值数的服务请求。例如:服务器A的权值被设计成1,B的权值是 3,C的权值是6,则服务器A、B、C将分别接受到10%、30%、60%的服务请求。此种均衡算法能确保高性能的服务器得到更多的使用率,避免低性能的服务器负载过重。

随机均衡(Random):把来自网络的请求随机分配给内部中的多个服务器。

权重随机均衡(Weighted Random):此种均衡算法类似于权重轮循算法,不过在处理请求分担时是个随机选择的过程。

响应速度均衡(Response Time):负载均衡设备对内部各服务器发出一个探测请求(例如Ping),然后根据内部中各服务器对探测请求的最快响应时间来决定哪一台服务器来响应客户端的服务请求。此种均衡算法能较好的反映服务器的当前运行状态,但这最快响应时间仅仅指的是负载均衡设备与服务器间的最快响应时间,而不是客户端与服务器间的最快响应时间。

最少连接数均衡(Least Connection):客户端的每一次请求服务在服务器停留的时间可能会有较大的差异,随着工作时间加长,如果采用简单的轮循或随机均衡算法,每一台服务器上的连接进程可能会产生极大的不同,并没有达到真正的负载均衡。最少连接数均衡算法对内部中需负载的每一台服务器都有一个数据记录,记录当前该服务器正在处理的连接数量,当有新的服务连接请求时,将把当前请求分配给连接数最少的服务器,使均衡更加符合实际情况,负载更加均衡。此种均衡算法适合长时处理的请求服务,如FTP。

处理能力均衡:此种均衡算法将把服务请求分配给内部中处理负荷(根据服务器CPU型号、CPU数量、内存大小及当前连接数等换算而成)最轻的服务器,由于考虑到了内部服务器的处理能力及当前网络运行状况,所以此种均衡算法相对来说更加精确,尤其适合运用到第七层(应用层)负载均衡的情况下。

DNS响应均衡(Flash DNS):在Internet上,无论是HTTP、FTP或是其它的服务请求,客户端一般都是通过域名解析来找到服务器确切的IP地址的。在此均衡算法下,分处在不同地理位置的负载均衡设备收到同一个客户端的域名解析请求,并在同一时间内把此域名解析成各自相对应服务器的IP地址(即与此负载均衡设备在同一位地理位置的服务器的IP地址)并返回给客户端,则客户端将以最先收到的域名解析IP地址来继续请求服务,而忽略其它的IP地址响应。在种均衡策略适合应用在全局负载均衡的情况下,对本地负载均衡是没有意义的。

2 为啥cpu占比这么高,究竟是是业务的那些代码写的有问题,如何把它揪出来?

在回答这个问题之前,我们先来搞清楚究竟什么是CPU的使用率?

Linux 作为一个多任务操作系统,将每个 CPU 的时间划分为很短的时间片,再通过调度器轮流分配给各个任务使用,因此造成多任务同时运行的错觉。为了维护 CPU 时间,Linux 通过事先定义的节拍率(内核中表示为 HZ),触发时间中断,并使用全局变量 Jiffies 记录了开机以来的节拍数。每发生一次时间中断,Jiffies 的值就加 1。

而我们通常所说的 CPU 使用率,就是除了空闲时间外的其他时间占总 CPU 时间的百分比,用公式来表示就是:

6b5d0892-8c0f-eb11-8da9-e4434bdf6706.png

可以从 /proc/stat 中的数据,很容易地计算出 CPU 使用率,这是开机以来的节拍数累加值,所以直接算出来的,是开机以来的平均 CPU 使用率,一般没啥参考价值。

事实上,为了计算 CPU 使用率,性能工具一般都会取间隔一段时间(比如 3 秒)的两次值,作差后,再计算出这段时间内的平均 CPU 使用率,即。

6e5d0892-8c0f-eb11-8da9-e4434bdf6706.png

这个公式,就是我们用各种性能工具所看到的 CPU 使用率的实际计算方法。

进程的CPU使用率计算:

跟系统的指标类似,Linux 也给每个进程提供了运行情况的统计信息,也就是 /proc/[pid]/stat。不过,这个文件包含的数据就比较丰富了,总共有 52 列的数据。

是不是说要查看 CPU 使用率,就必须先读取 /proc/stat 和 /proc/[pid]/stat 这两个文件,然后再按照上面的公式计算出来呢?当然不是,各种各样的性能分析工具已经帮我们计算好了。不过要注意的是,性能分析工具给出的都是间隔一段时间的平均 CPU 使用率,所以要注意间隔时间的设置,特别是用多个工具对比分析时,你一定要保证它们用的是相同的间隔时间。

怎么查看 CPU 使用率?

top 和 ps 是最常用的性能分析工具:top 显示了系统总体的 CPU 和内存使用情况,以及各个进程的资源使用情况。ps 则只显示了每个进程的资源使用情况。

725d0892-8c0f-eb11-8da9-e4434bdf6706.png

top 默认显示的是所有 CPU 的平均值,这个时候你只需要按下数字 1 ,就可以切换到每个 CPU 的使用率了。

pidstat ,它是一个专门分析每个进程 CPU 使用情况的工具。

用户态 CPU 使用率 (%usr);内核态 CPU 使用率(%system);运行虚拟机 CPU 使用率(%guest);等待 CPU 使用率(%wait);以及总的 CPU 使用率(%CPU)。

745d0892-8c0f-eb11-8da9-e4434bdf6706.png

最后我们回到问题CPU 使用率过高怎么办?

我们可以轻而易举的就找到那个进程使用率过高,但是到底是那段代码哪个函数导致的?

第一种常见用法是 perf top,类似于 top,它能够实时显示占用 CPU 时钟最多的函数或者指令,因此可以用来查找热点函数,使用界面如下所示:

775d0892-8c0f-eb11-8da9-e4434bdf6706.png

输出结果中,第一行包含三个数据,分别是采样数(Samples)、事件类型(event)和事件总数量(Event count)。

采样数需要我们特别注意。如果采样数过少(比如只有十几个),那下面的排序和百分比就没什么实际参考价值了。

再往下看是一个表格式样的数据,每一行包含四列,分别是:

第一列 Overhead ,是该符号的性能事件在所有采样中的比例,用百分比来表示。

第二列 Shared ,是该函数或指令所在的动态共享对象(Dynamic Shared Object),如内核、进程名、动态链接库名、内核模块名等。

第三列 Object ,是动态共享对象的类型。比如 [.] 表示用户空间的可执行程序、或者动态链接库,而 [k] 则表示内核空间。

最后一列 Symbol 是符号名,也就是函数名。当函数名未知时,用十六进制的地址来表示。

接着再来看第二种常见用法,也就是 perf record 和 perf report。 perf top 虽然实时展示了系统的性能信息,但它的缺点是并不保存数据,也就无法用于离线或者后续的分析。

而 perf record 则提供了保存数据的功能,保存后的数据,需要你用 perf report 解析展示。

总结一下cpu过高分析方法如下:

  • 1 通过top命令 找出cpu使用率过高的进程;
  • 2 centos 下 通过 perf record -g -p <pid> (cpu 使用率过高进程ID),执行一会按ctrl+c停止 ;
  • 3 经过第二步 操作,在当前文件夹下将生成 perf.data文件
  • 4 通过命令perf report 可查看分析报告。

最后我给大家出一道逻辑题让大家来答,答案我将在下一篇文章进行公布。

题目并不难,希望你一定自己做一做。这是一道著名的题,在你漫长的人生路上很有可能还会再次遇到这道题,可是如果你这一次没自己做就知道了答案,到时候你会因为错过了做这道题的体验而感到非常遗憾。请看题。

有一种纸牌,它的正面是一个数字,背面是一种颜色。现在桌面上有四张牌,它们向上的一面分别是 ——

785d0892-8c0f-eb11-8da9-e4434bdf6706.png
  • 第一张牌是数字 3
  • 第二张牌是数字 8
  • 第三张牌是红色
  • 第四张牌是棕色

好,现在咱们约定一条规则:“如果纸牌正面的数字是偶数,那么背面的颜色就必须是红色”。现在我们想知道桌上这四张牌中有哪些牌违反了这条规则。那请问,你至少需要掀开哪几张牌呢?

这道题英国心理学家彼得·沃森(Peter Cathcart Wason)1966 年发明的,现在叫“沃森选择任务(Wason selection task)”。几十年来,几代心理学家不知道拿这道题做过多少次实验,它是最常用的认知心理学测验题。

7b5d0892-8c0f-eb11-8da9-e4434bdf6706.png

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

大数乘加运算然后取模 c++_脚本语言系列之Java | Java中的运算符

本文主要介绍java中的常见运算符&#xff0c;如算术运算符、赋值运算符、比较运算符、逻辑运算符、位运算符、三目运算符等。一、几个概念int a 3 4; 、就是操作符&#xff0c;是算术运算符&#xff0c;我们还有其他很多的运算符 3&#xff0c;4就是参与运算的操作数 3 4整体…

visio形成数据字典_入职数据产品经理第一天,同事问了我3个问题

什么是数据产品经理&#xff1f;数据产品经理有什么能力要求&#xff1f;数据产品经理的未来发展什么&#xff1f;文章围绕这三个问题进行陈述分析&#xff0c;希望看完能对你有所帮助。最近&#xff0c;前同事老曹跳槽到去了一家初具规模的互联网公司&#xff0c;作为刚入职公…

电脑硬盘内存不足怎么办_电脑内存不足怎么办?三招帮你轻松解决

熟悉PC硬件的小伙伴都知道&#xff0c;内存相对于电脑来说是一个相当重要的部件&#xff0c;内存可以说是相当于CPU的“工作室”&#xff0c;因为PC所有运行的程序都是在内存中运行&#xff0c;它决定了多少、多大的程序能即时运行&#xff0c;如若执行程序过大或者过多就会导致…

ad敷铜后还有部分飞线_种草!车厘子红组合高柜,除了颜美,还有什么好?

最近上新君在AD线下体验店遇到个忍不住一定要推荐的牌子~它是谁呢&#xff1f;卖个关子猜一猜&#xff1a;「家居达人等级测试」开始⏰「线索一」线下店进门右手边这组红色柜子&#x1f446;「线索二」它是乐高“母国”丹麦的收纳家具品牌&#xff0c;花了37年&#xff0c;就做…

宝塔php开启zip组建,宝塔面板如何开启php扩展

宝塔面板如何开启php扩展&#xff1f;宝塔面板的PHP安装路径为/www/server/php/ 且支持多个PHP版本共存&#xff0c;所以&#xff0c;安装PHP扩展的方法与网上那些示例略有不同。下们通过安装oauth扩展来说明一下如何安装第三方PHP扩展。安装之前&#xff0c;请先到软件列表 –…

win7局域网共享设置_分享几个简单实用的局域网共享设置工具

发现很多朋友对于局域网共享设置都不是很熟悉&#xff0c;特别是现在Windows 10已经越来越普遍&#xff0c;很多用户可能熟悉Windows XP、Winodws7的文件共享、打印机共享比较熟悉&#xff0c;但是一到Windows是就感觉懵逼了&#xff01;确实Windows 10在共享权限设置这块需要更…

dataframe保存为txt_TxtToMy下载-TxtToMy((txt导入myql数据库))v3.7免费版

TxtToMy是一个数据转换软件&#xff0c;帮助数据库用户导入CSV (TXT)数据到MySQL数据库。用户能够通过TxtToMy更好地将文本(csv)文件数据导入Mysql&#xff0c;十分实用&#xff0c;感兴趣的用户可以自行下载体验。基本简介TxtToMy(txt导入myql数据库)是一款十分优秀的TXT导入到…

外星人台式电脑_推荐|外星人笔记本、主机、台式电脑多少钱?(价格)到底怎么样呢?(双十一)...

自外星人电脑爆火至今&#xff0c;关于它的争议就一直没有断过。有人说外星人电脑是超好用的高配电脑&#xff0c;也有人说买外星人电脑的都是人傻钱多&#xff0c;前段时间我还看到有人还因为这个问题吵了起来。说实话&#xff0c;这真的没有吵架的必要。每个人的消费观念不同…

bpmn流程图_几款流程图制作工具

在流程设计、思路展示、网络布线、工作汇报、简介说明、设计程序等工作中&#xff0c;都少不了要用流程图来形象清晰地说明问题。因此&#xff0c;我们经常需要易用的流程图软件来帮助我们绘制流程图&#xff0c;今天&#xff0c;小编就在这里介绍几款流程图软件。Microsoft Vi…

gdb 没有那个文件或目录_阿黛尔暴瘦变回粉丝喜爱的那个她,依然那样楚楚动人...

阿黛尔(Adele)在《第六夜现场》(Saturday Night Live)主持中首次亮相&#xff0c;穿搭风格再次让人眼前一亮参加15届格莱美奖得主阿黛尔出生于伦敦&#xff0c;已经32岁了&#xff0c;她的R&B音乐获得了两项格莱美奖&#xff0c;在获奖后在表示&#xff0c;她真的不敢相信她…

iphonex售价_库克也非常无奈!颁发新规后:依旧未能阻止苹果12的售价大跳水

【11月2日讯】相信大家都知道&#xff0c;苹果在发布了iPhone 12系列手机之后&#xff0c;为了改变以往iPhone手机首发售价就“破发”的尴尬局面&#xff0c;也是直接颁发了新规&#xff0c;限制了国内补贴力度最强的某电商平台—某多多&#xff0c;试图通过重新掌控供应链渠道…

鼠标连点器电脑版_最值得买的鼠标垫推荐-最佳长款桌垫鼠标垫排行榜【2020年10月】...

超大鼠标垫可以将键盘、鼠标都垫着,大而厚实,操作电脑时更方便,不会出现鼠标垫不够用的情况,而且超大鼠标垫还可作为桌垫,美观大方,适合在家使用。今天给大家推荐最佳长款桌垫鼠标垫排行&#xff0c;希望对大家选购鼠标垫有帮助。第一名 美商海盗船|MM300战场风桌垫海盗船的产品…

superoneclick 2.2_减排二氧化碳2.2万吨!“电能替代”助安吉传统产业绿色转型

近日&#xff0c;安吉县孝丰镇丰缘茶场的茶农夏亚红联系上了国网安吉县供电公司的工作人员&#xff0c;希望对方再来指导一下新安装设备的使用和操作。作为安吉县“节能贷”的用户&#xff0c;夏亚红成为该公司推出的茶农专变新服务的首位受益人&#xff0c;她坦言明年炒茶旺季…

c# spire.xls 设置文字为微软雅黑_只要一分钟,给你的PPT文字加上拼音和声调

每天下午一点&#xff0c;PPT技能进步一点做PPT时必不可少的一项就是字体使用合适的字体可以让我们的PPT更加美观见惯了满屏幕的宋体和微软雅黑你也许想要尝试一下其他的方式来装点的文字何不用拼音&#xff1f;都知道在一些低年级的PPT中会给文字添加拼音相信很多看过语文老师…

xgboost 怎么读_南宁日语培训考级怎么选_在线日语学习

摘要&#xff1a; 南宁日语培训考级怎么选_在线日语学习为你介绍口语学习&#xff0c;听力先行。要先有输入&#xff0c;再有输出。要想有一口规范的日语口语发音&#xff0c;有必要先许多做听力练习。当你的耳朵熟悉了每个单词的发音&#xff0c;你才有时机说出规范的日语。听…

glsl shader 雪_深夜食堂里的雪平锅,美味秘诀:手工打造,高效导热,煮煲炸蒸都好用!...

hello&#xff0c;看今天内容之前生活妹给大家推荐一下各种好吃好用的↓↓↓在日本&#xff0c;几乎每个家庭都有一个雪平锅。日本厨师冨田唯介甚至专门为雪平锅撰写了一本书&#xff1a;《雪平锅无油料理》&#xff0c;里面详细讲诉了雪平锅能做的各类美食&#xff0c;从煮物到…

ubuntu 安装GPU黑屏 修改GRUB_Ubuntu升级安装最新内核的方法与注意事项(以18.04为例)...

请关注本头条号&#xff0c;每天坚持更新原创干货技术文章。如需学习视频&#xff0c;请在微信搜索公众号“智传网优”直接开始自助视频学习前言本文主要如何安全地升级Ubuntu内核&#xff0c;以18.04 Server版为例纂写本教程。我们先来了解一下什么是主线内核构建(Mainline Ke…

send tcp char far_TCP/IP之传输层详解

1. 传输层特征传输层位于TCP/IP协议族中的第4层&#xff0c;负责在网络主机中创建虚拟传输控制协议TCP&#xff0c;或用户数据报协议UDP&#xff0c;也叫“Transport Layer”。此层向其主机上运行的应用程序发送和接收数据。传输层将端口号分配给在主机上的应用程序中运行的进程…

python库_Python 基本功: 2. 学会调用库

在完成 基本功教程1 之后&#xff1a;多多教Python&#xff1a;Python 基本功: 1. Hello world​zhuanlan.zhihu.com你已经成功完成了第一个 Python 应用程序&#xff0c;并且运用了三种不同的创作工具。接下来&#xff0c;我们先来从宏观的角度了解一下 Python 宇宙&#xff0…

抽象工厂模式java_《JAVA与模式》之抽象工厂模式

场景问题举个生活中常见的例子——组装电脑&#xff0c;我们在组装电脑的时候&#xff0c;通常需要选择一系列的配件&#xff0c;比如CPU、硬盘、内存、主板、电源、机箱等。为讨论使用简单点&#xff0c;只考虑选择CPU和主板的问题。事实上&#xff0c;在选择CPU的时候&#x…