您当前的位置:首页 > 电脑百科 > 程序开发 > 编程百科

如何分析系统的负载?生产排错必备技能

时间:2023-09-03 12:31:24  来源:微信公众号  作者:猿java
作为一名后端程序员,应该能经常听到“系统负载过高”,“CPU打爆了”诸如此类的描述,那么,什么是系统负载过高?什么是 CPU打爆了?生产环境,又该如何排查?今天我们就来聊一聊。
遇到问题时,最重要的一环就是查看问题,下面分析 4个生产环境中会高频使用的查询指令。

一、如何查看负载 

 

top 命令

top是使用最高频的指令之一,命令及运行截图如下:

# 系统默认安装的命令top

 

通过执行指令可以看出:top 是交互式的系统监视工具,实时显示的信息特别多,主要包括下面几类:

  1. 进程信息:

    • PID:进程id,唯一标识进程

    • 用户:运行进程的用户

    • CPU 使用率:进程正在使用的 CPU 资源的百分比

    • 内存使用率:进程正在使用的内存的百分比

    • 进程状态:进程的状态,如运行、休眠、停止等

    • 进程优先级:进程的优先级

    • 进程启动时间:进程启动的时间

  2. 系统总体性能:

    • 系统平均负载:1分钟、5分钟和15分钟的平均负载,用于表示系统的负载情况

    • 总体 CPU使用率:系统的总体 CPU 使用率

    • 总体内存使用:系统的总体内存使用情况,包括总内存、空闲内存、已使用内存等信息

    • 总体交换分区使用:如果有交换分区,它的使用情况也会显示

  3. CPU 利用率:

    • 按核心或逻辑处理器显示每个 CPU 核心的使用情况,包括用户态、系统态、空闲时间等

  4. 内存和交换分区使用情况:

    • 物理内存:总物理内存、已使用内存、可用内存、缓存和缓冲区等信息

    • 交换分区:总交换空间、已使用交换空间和可用交换空间

  5. 任务信息:

    • 运行中的任务总数、运行任务数、睡眠任务数等

  6. 系统时间:

    • 当前系统时间以及系统运行时间

uptime 命令

top命令显示的信息太多,如果想简单的展示系统负载,uptime是比较匹配的命令,命令及运行截图如下:

# 系统默认安装的命令uptime

 

 

通过截图可以看出:uptime 命令只会显示系统的平均负载以及系统当前时间、已运行时间和登录用户数量 4个信息。

htop 命令

htop命令,系统默认是不安装的,所以在使用该命令时需要先安装,命令和运行截图如下:

​​​​​​​# 系统默认不安装,需要自己安装,比如:apt-get install htophtop

 

通过执行指令可以看出:htop 和 top很类似,也是交互式的系统监视工具,主要会显示下面8种信息:

  • 进程列表:htop 显示当前运行的所有进程的列表,包括它们的进程ID(PID)、用户、进程状态、CPU 使用率、内存使用量等信息。这些信息按默认情况下按 CPU 使用率降序排列。

  • CPU 和内存利用情况:htop 在顶部显示了一个可视化的 CPU 和内存利用情况的图形。这些图形可以帮助你直观地了解系统资源的使用情况。

  • 系统负载信息:htop 在顶部的第一行显示了系统的平均负载值,以及CPU核心的使用情况。这包括用户态、系统态和等待态(I/O等待)的负载。

  • 快捷键帮助:htop 在底部显示了一些快捷键的帮助信息,以便用户可以通过键盘快速执行不同的操作,如终止进程、改变排序方式等。

  • 进程树:htop 可以显示进程树,这是一种以树状结构展示进程之间关系的方式,有助于理解进程之间的父子关系。

  • 进程状态标签:htop 使用不同的颜色和标签来表示进程的状态,例如运行中的进程、休眠的进程、僵尸进程等,这有助于快速识别问题。

  • 进程详细信息:通过选中进程并按下键盘上的箭头键或使用其他快捷键,htop 可以显示有关选定进程的更详细的信息,如打开的文件、线程信息、进程环境变量等。

  • 可定制性:htop 允许用户自定义显示的列和排序方式,以满足特定的监视需求。

w 命令

w 命令和 uptime很类似,命令及运行截图如下:

​​​​​​​# 系统默认安装w

 

通过执行指令可以看出:w 命令会显示当前登录用户的信息,包括平均负载。

通过执行上面 4个指令,我们可以看出:每个指令的结果里面都包含“load averages:  

数字1 数字2 数字3”, 那么 load averages是什么?后面的3个数字又代表什么含义?


 

二、平均负载

定义

load averages,中文翻译为:平均负载,它是指在一段时间内系统上运行的进程数量或等待资源的平均情况。通常用于 Unix 和类 Unix 系统。

定义看起来有些晦涩,其实,我们可以把平均负载简单理解成平均活跃进程数。

三个重要数字

介绍了平均负载的定义,接着分析 load averages 后面三个重要数字的含义,通过执行 man uptime指令,我们可以查看官方文档:

​​​​​​​# 系统默认安装的命令man uptime

 

 

从文档截图可以总结三个数字的含义分别为:

  • 1分钟平均负载: 表示在最近1分钟内系统的平均负载情况;

  • 5分钟平均负载: 表示在最近5分钟内系统的平均负载情况;

  • 15分钟平均负载: 表示在最近15分钟内系统的平均负载情况;

解释完 load averages 3个数字的含义,另一个问题也就随之而来:3个数字的值为多少代表系统健康?多少代表系统过载了?在解答这个问题之前,我们先来分析“CPU打爆了”。

三、CPU打爆了

CPU打爆了,其实就是说 CPU的使用率大于等于100%,比如,如果服务器只有一个 CPU,100% 就代表 CPU满负载,如果服务器有 2个 CPU,那么 CPU的使用率 >= 200%,CPU就被打爆了, 在生产环境,通常会把CPU总量的 80%~85%设置为报警阈值,这样就能提醒相关人员服务器的 CPU使用过高,需要特别关注。

那么,如何查看服务器的 CPU个数呢?可以使用下面的指令:

​​​​​​​# linux 查看CPU个数grep 'model name' /proc/cpuinfo | wc -l# mac 查看CPU个数sysctl -n hw.physicalcpu

 

如下图:

四、两者关系

分析了平均负载和 CPU使用率,那么两者之间存在什么关系呢?

在平均负载定义时提到平均负载就是进程平均数,因此,先来看看进程是什么:

进程是指计算机上运行的程序实例,通常包含 CPU密集型进程 和 IO密集型进程,两种进程的详情如下:

  1. CPU密集型进程:

  • 特点:CPU密集型进程是那些主要依赖于处理器执行能力的任务。它们通常涉及大量的计算、数据处理和算法运算,需要大量的 CPU时间来完成。

  • 资源需求:这种类型的进程主要消耗 CPU资源,而对内存和磁盘等其他资源的需求相对较低。

  • 性能特点:CPU密集型进程在多核处理器上执行时,可以受益于并行计算,因为它们可以同时在多个CPU核心上运行。提高CPU频率和核心数量可以显著提高这些进程的性能。

  • 示例:数值模拟、图像处理、密码破解等计算密集型任务。

  1. IO密集型进程:

  • 特点:IO密集型进程是那些主要涉及文件读写、网络通信、数据库查询等需要大量IO操作的任务。它们通常不需要大量的CPU计算时间,而是花费大部分时间等待IO操作完成。

  • 资源需求:IO密集型进程对 CPU的需求相对较低,但对存储设备、网络和内存等IO相关资源的需求较高。

  • 性能特点:提高 CPU性能对 IO密集型任务的影响有限,因为它们通常受限于IO操作的速度。使用异步IO、多线程或多进程等技术可以提高IO密集型进程的性能。

  • 示例:Web服务器、数据库服务器、文件上传下载服务等需要频繁IO操作的应用程序。

到此,我们可以给平均负载重新定义,它是指系统中 IO密集型进程和 CPU密集型进程的平均数。这样是不是对平均负载有更好的理解。

而 CPU作为中央处理单元,它是执行系统中各种进程的硬件。假如每个 CPU上刚好有且只有一个进程在运行,是不是意味着不用切换 CPU,每个进程享受着 CPU 1对1的服务。因此,如果平均负载等于 CPU个数,就刚好满足了这种 1对1服务,所以,平均负载最理想的情况就是等于 CPU个数。

有了这个前提,可以得出:在单 CPU服务器上 load averages 1 1 1 是最理想的平均负载,同理,在 N个 CPU的服务器上 load averages N N N 是最理想的平均负载。

如果 平均负载的3个数字不等于 CPU个数,就代表负载不正常吗?下面我们分析一个案例:单 CPU服务器 load averages 0.6 1.2 0.8。

1分钟平均负载为0.6, 小于1, 属于低负载,5分钟平均负载为1.2,大于1,系统过载,15分钟平均负载为0.8, 也是低负载。平均负载对整体走势是: 从 15分钟的0.8 升高到 5分钟的 1.2, 因此系统服务在升高,但又从 5分钟的1.2 降到 1分钟的0.6, 说明服务器的负载在降低,最后正常,所以对于 load averages,我们应该按照整个发展趋势来分析,这样才能更好的分析系统的负载变化。趋势可以参考下面对手绘图:

那么,生产环境,平均负载多少是合理的?

业内经验值:小于 CPU总数的 70% 是正常的,超过 70% 就需特别注意。但这个值并不是绝对的,需要根据具体业务具体分析。

最后,平均负载高,CPU就一定高吗?

在讲解进程时提到进程有 CPU密集型和 IO密集型,而 IO密集型对 CPU的影响不大,所以,平均负载高,CPU不一定高。

因此,在生产排查时,如果发现负载高,CPU使用率高,那任务是 CPU密集型概率比较大;如果发现负载高,CPU使用率不是很高,那任务是 IO密集型概率比较大。


 

五、CPU飙高排查过程

CPU飙高排查,应该是对很多后端程序员的一个能力要求,下面给出了一个常用的排查步骤:

  1. 连接到问题服务器;

  2. 执行 top命令:查找 CPU使用最高的进程PID;

  3. 执行 jstack > t.log 命令:导出线程堆栈;

  4. 执行 top -pH pid:查看进程所有线程的 CPU使用率以及线程Id;

  5. 执行 printf %x 线程pid:将线程ID转换成16进制ID,并在步骤3中生成的线程堆栈里找到对应的线程;

  6. 根据堆栈信息,找到对应源码分析具体原因;

六、总结

  • 本文介绍了 4个生产环境常用的系统负载排查指令:top,uptime,htop,w;

  • 本文分析了平均负载是什么,以及如何分析负载的3个重要数字;

  • 本文分析了平均负载和 CPU的关系:平均负载理想值等于 CPU数;

  • 进程分 CPU密集型和 IO密集型, 对于 CPU密集型进程,负载高,CPU也随着升高;IO密集型进程,负载高,CPU不一定高;

  • 文末给出了生产环境 CPU飙高的排查过程;



Tags:负载   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,不构成投资建议。投资者据此操作,风险自担。如有任何标注错误或版权侵犯请与我们联系,我们将及时更正、删除。
▌相关推荐
三分钟学会负载均衡的重要性与Ribbon集成
在这个充满挑战和收获的60天学习之旅中,你将迅速提升成为一名全栈工程师。专注于Spring Boot框架,我们将深入研究高级特性,从项目初始化到微服务架构,再到性能优化和持续集成部...【详细内容】
2024-03-11  Search: 负载  点击:(26)  评论:(0)  加入收藏
C++编程实践:IP哈希负载均衡算法
Nginx是一个高性能的开源Web服务器和反向代理服务器,它可以有效地处理高并发的请求。 下面是Nginx处理高并发的一些主要特点和技术: 事件驱动模型:Nginx使用事件驱动的异步非...【详细内容】
2023-12-11  Search: 负载  点击:(191)  评论:(0)  加入收藏
Nginx的负载均衡实现,你学会了吗?
环境 主机 ip 用途 软件 web1 192.168.50.60 nginx-1 httpd web2 192.168.50.61 nginx-2 httpd proxy 192.168.50.62 负载...【详细内容】
2023-12-06  Search: 负载  点击:(145)  评论:(0)  加入收藏
负载均衡在大规模分布式系统中的应用:解决性能瓶颈
随着互联网的快速发展,大规模分布式系统在各行各业得到了广泛应用。这些系统需要处理大量的请求和数据,面临着性能瓶颈的挑战。负载均衡作为一种关键的技术手段,可以帮助大规模...【详细内容】
2023-11-14  Search: 负载  点击:(298)  评论:(0)  加入收藏
常见的负载均衡算法及其适用场景
负载均衡是指将请求分发到多个服务器上,以实现负载的均衡,提高系统的性能和可靠性。在云计算、大数据等领域,负载均衡技术已经成为了重要的研究方向。本文将介绍常见的负载均衡...【详细内容】
2023-11-13  Search: 负载  点击:(198)  评论:(0)  加入收藏
云计算中的负载均衡技术:实现弹性和可伸缩性
云计算作为一种新型的计算模式,已经成为了许多企业和个人的首选。在云计算中,负载均衡技术起着至关重要的作用,它可以实现系统的弹性和可伸缩性,确保系统能够应对不断变化的负载...【详细内容】
2023-11-13  Search: 负载  点击:(82)  评论:(0)  加入收藏
SpringCloud OpenFeign整合Ribbon实现负载均衡及源码分析
负载均衡器在分布式网络中扮演着非常重要的角色。通过负载均衡,可以实现更好的性能和可靠性,同时提高系统的可扩展性和弹性。目前,SpringCloud体系中,主要使用的有两种:Netflix的...【详细内容】
2023-11-09  Search: 负载  点击:(234)  评论:(0)  加入收藏
Nacos有几种负载均衡策略?
Nacos 作为目前主流的微服务中间件,包含了两个顶级的微服务功能:配置中心和注册中心。1、配置中心扫盲配置中心是一种集中化管理配置的服务,通俗易懂的说就是将本地配置文件“...【详细内容】
2023-11-01  Search: 负载  点击:(215)  评论:(0)  加入收藏
深入剖析Netflix Ribbon:分布式微服务架构的负载均衡神器
作者 | 波哥审校 | 重楼在现代分布式微服务架构中,负载均衡是保证系统高可用、高性能的关键组件之一。Netflix Ribbon作为Netflix开源的负载均衡库,为微服务架构提供了强大的...【详细内容】
2023-11-01  Search: 负载  点击:(220)  评论:(0)  加入收藏
Kubernetes使用OkHttp客户端进行网络负载均衡
在一次内部Java服务审计中,我们发现一些请求没有在Kubernetes(K8s)网络上正确地实现负载均衡。导致我们深入研究的问题是HTTP 5xx错误率的急剧上升,由于CPU使用率非常高,垃圾收集...【详细内容】
2023-10-30  Search: 负载  点击:(261)  评论:(0)  加入收藏
▌简易百科推荐
即将过时的 5 种软件开发技能!
作者 | Eran Yahav编译 | 言征出品 | 51CTO技术栈(微信号:blog51cto) 时至今日,AI编码工具已经进化到足够强大了吗?这未必好回答,但从2023 年 Stack Overflow 上的调查数据来看,44%...【详细内容】
2024-04-03    51CTO  Tags:软件开发   点击:(5)  评论:(0)  加入收藏
跳转链接代码怎么写?
在网页开发中,跳转链接是一项常见的功能。然而,对于非技术人员来说,编写跳转链接代码可能会显得有些困难。不用担心!我们可以借助外链平台来简化操作,即使没有编程经验,也能轻松实...【详细内容】
2024-03-27  蓝色天纪    Tags:跳转链接   点击:(12)  评论:(0)  加入收藏
中台亡了,问题到底出在哪里?
曾几何时,中台一度被当做“变革灵药”,嫁接在“前台作战单元”和“后台资源部门”之间,实现企业各业务线的“打通”和全域业务能力集成,提高开发和服务效率。但在中台如火如荼之...【详细内容】
2024-03-27  dbaplus社群    Tags:中台   点击:(8)  评论:(0)  加入收藏
员工写了个比删库更可怕的Bug!
想必大家都听说过删库跑路吧,我之前一直把它当一个段子来看。可万万没想到,就在昨天,我们公司的某位员工,竟然写了一个比删库更可怕的 Bug!给大家分享一下(不是公开处刑),希望朋友们...【详细内容】
2024-03-26  dbaplus社群    Tags:Bug   点击:(5)  评论:(0)  加入收藏
我们一起聊聊什么是正向代理和反向代理
从字面意思上看,代理就是代替处理的意思,一个对象有能力代替另一个对象处理某一件事。代理,这个词在我们的日常生活中也不陌生,比如在购物、旅游等场景中,我们经常会委托别人代替...【详细内容】
2024-03-26  萤火架构  微信公众号  Tags:正向代理   点击:(10)  评论:(0)  加入收藏
看一遍就理解:IO模型详解
前言大家好,我是程序员田螺。今天我们一起来学习IO模型。在本文开始前呢,先问问大家几个问题哈~什么是IO呢?什么是阻塞非阻塞IO?什么是同步异步IO?什么是IO多路复用?select/epoll...【详细内容】
2024-03-26  捡田螺的小男孩  微信公众号  Tags:IO模型   点击:(8)  评论:(0)  加入收藏
为什么都说 HashMap 是线程不安全的?
做Java开发的人,应该都用过 HashMap 这种集合。今天就和大家来聊聊,为什么 HashMap 是线程不安全的。1.HashMap 数据结构简单来说,HashMap 基于哈希表实现。它使用键的哈希码来...【详细内容】
2024-03-22  Java技术指北  微信公众号  Tags:HashMap   点击:(11)  评论:(0)  加入收藏
如何从头开始编写LoRA代码,这有一份教程
选自 lightning.ai作者:Sebastian Raschka机器之心编译编辑:陈萍作者表示:在各种有效的 LLM 微调方法中,LoRA 仍然是他的首选。LoRA(Low-Rank Adaptation)作为一种用于微调 LLM(大...【详细内容】
2024-03-21  机器之心Pro    Tags:LoRA   点击:(12)  评论:(0)  加入收藏
这样搭建日志中心,传统的ELK就扔了吧!
最近客户有个新需求,就是想查看网站的访问情况。由于网站没有做google的统计和百度的统计,所以访问情况,只能通过日志查看,通过脚本的形式给客户导出也不太实际,给客户写个简单的...【详细内容】
2024-03-20  dbaplus社群    Tags:日志   点击:(4)  评论:(0)  加入收藏
Kubernetes 究竟有没有 LTS?
从一个有趣的问题引出很多人都在关注的 Kubernetes LTS 的问题。有趣的问题2019 年,一个名为 apiserver LoopbackClient Server cert expired after 1 year[1] 的 issue 中提...【详细内容】
2024-03-15  云原生散修  微信公众号  Tags:Kubernetes   点击:(6)  评论:(0)  加入收藏
站内最新
站内热门
站内头条