Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >生产环境系统负载过高如何定位?

生产环境系统负载过高如何定位?

作者头像
Java学习录
发布于 2019-12-19 06:56:41
发布于 2019-12-19 06:56:41
1.4K00
代码可运行
举报
文章被收录于专栏:Java学习录Java学习录
运行总次数:0
代码可运行

通常情况下,我们最熟悉的查看平均负载的命令可能就是uptime这个命令了

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[root@node3 ~]# uptime
 22:33:18 up 174 days,  6:41,  1 user,  load average: 0.06, 0.36, 0.65

最后3个值分别是过去1、5、15分钟内的平均负载,那么在生产环境中,当系统负载达到多少的时候需要我们特别注意呢?

个人认为当平均负载持续超过cpu数量的80%以上就代表着当前机器已经算全力在工作了,一旦系统负载过高,就会导致程序变慢,严重的甚至会产生生产事故。比如说当前8核的系统,系统负载一直维持在7以上或者更高,这个时候你就该去排查原因了,是因为故障导致需要解决呢,还是说程序本身需要的资源比较多,需要加机器呢。

接下来,我将用几个例子来为你展开当生产环境系统负载过高时,如何排查

分析工具

在进行分析之前,我需要用到两个工具stress、sysstat,来模拟一下生产环境出现问题的场景

stress

这是一个压测工具,使用它可以很容易的对系统造成各种压力,常用选项如下:

  • -c, --cpu N:产生 N 个进程,每个进程都反复不停的计算随机数的平方根
  • -i, --io N:产生 N 个进程,每个进程反复调用 sync() 将内存上的内容写到硬盘上
  • -m, --vm N:产生 N 个进程,每个进程不断分配和释放内存 --vm-bytes B:指定分配内存的大小 --vm-stride B:不断的给部分内存赋值,让 COW(Copy On Write)发生 --vm-hang N:指示每个消耗内存的进程在分配到内存后转入睡眠状态 N 秒,然后释放内存,一直重复执行这个过程 --vm-keep:一直占用内存,区别于不断的释放和重新分配(默认是不断释放并重新分配内存)
  • -d, --hadd N:产生 N 个不断执行 write 和 unlink 函数的进程(创建文件,写入内容,删除文件) --hadd-bytes B:指定文件大小
  • -t, --timeout N:在 N 秒后结束程序
sysstat

这是一个Linux性能监控的工具集,本文将会使用到其中的两个工具:

  • mpstat:CPU性能分析工具,可以用来查看CPU的平均指标,常用参数如下:
    • -P {cpu l ALL}:表示监控哪个CPU, cpu在[0,cpu个数-1]中取值
    • internal:相邻的两次采样的间隔时间
    • count:采样的次数
  • pidstat:实时查看进程的CPU、内存、I/O及上下文切换等性能指标,常用参数如下:
    • -u:默认的参数,显示各个进程的cpu使用统计
    • -r:显示各个进程的内存使用统计
    • -d:显示各个进程的IO使用情况
    • -p:指定进程号
    • -w:显示每个进程的上下文切换情况
    • -t:显示选择任务的线程的统计信息外的额外信息

你可以使用如下命令下载安装这两个工具

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
yum install -y epel-release
yum install -y stress
wget https://github.com/sysstat/sysstat/archive/v11.5.5.tar.gz
tar -zxvf v11.5.5.tar.gz
cd sysstat-11.5.5
./configure
make
make install
cp mpstat /usr/bin/
cp pidstat /usr/bin/
案例分析

这里希望你手里能够有一台2核以上的机器能供测试使用,首先使用uptime命令观察一下当前系统的平均负载,我的系统当前值为0.06, 0.36, 0.65

cpu密集型进程

由CPU使用率过高引起的系统负载升高

我们使用stress占用一个cpu

stress --cpu 1 --timeout 600

持续观察过去一分钟的平均负载,可以发现慢慢的就会上升到1点多

watch -d uptime

接着使用mpstat工具观察一下当前cpu的占用情况

mpstat -P ALL 5

这个命令的意思是每隔5秒更新一次全部cpu的占用信息,下图也说明我们的压测工具已经生效了

接着我们就使用工具来定位出是哪个进程引起的这个系统负载过高

pidstat -u 5 1

这个命令是每5秒输出一组监控数据

i/O密集型

由iowait过高引起的系统负载升高

同上个案例,先使用压测工具模拟IO压力

stress -i 1 --timeout 600

使用uptime观察系统负载的变化

watch -d uptime

使用mpstat查看CPU使用率的变化情况

mpstat -P ALL 5

观察结果发现刚才都还是0的iowait已经上升了很多

接着再次使用pidstat定位到具体的进程

pidstat -u 5 1

大量进程

这次使用stress工具模拟8个进程持续占有CPU

stress -c 8 --timeout 600

然后使用pidstat依然可以轻松的定位到问题所在

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-12-06,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Java学习录 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
性能测试必备知识(4)- 使用 stress 和 sysstat 分析平均负载过高的场景
--vm-bytes B 指定 malloc() 时内存的字节数,默认256MB --vm-hang N 指定执行 free() 前等待的秒数 -d N、 --hdd N
小菠萝测试笔记
2020/07/21
2.1K0
性能测试必备知识(4)- 使用 stress 和 sysstat 分析平均负载过高的场景
如何理解系统平均负载值(一)
每当我们发现系统变慢时,通常做的第一件事,就是执行top或者uptime命令,来了解系统的负载情况。比如下面这样,我在命令行里输入了uptime命令,系统也随即给出了结果。
全栈程序员站长
2022/09/06
9040
linux性能优化学习笔记-pidstat
平均负载跟cpu有很大关系, 比如我们的系统为2个cpu,那么平均负载2 表示两个cpu全部占满。 我们的平均负载1分钟内为0.02,可以简单先理解为每个cpu占用了1%。
用户2825413
2019/07/15
8170
系统的load average
可运行状态进程:可以理解为系统内正在占用CPU或正在等待CPU的进程,也就是处于R状态的进程
程哲
2021/12/10
5900
性能分析之Linux系统平均负载案例分析
在上文性能基础之理解Linux系统平均负载和CPU使用率,我们详细介绍了 Linux 系统平均负载的相关概念,本文我们来做几个案例分析,以便于加深理解。
高楼Zee
2019/07/17
1.5K0
性能分析之Linux系统平均负载案例分析
CPU测试工具
使用stress-ng是一个 Linux 系统压力测试工具,模拟进程平均负载升高的场景。
陈不成i
2021/05/24
3.4K0
​Linux CPU 性能优化指南
本文作者:allenxguo,腾讯 QQ 音乐后台开发工程师 本文主要帮助理解 CPU 相关的性能指标,常见的 CPU 性能问题以及解决方案梳理。 系统平均负载 简介 系统平均负载:是处于可运行或不可中断状态的平均进程数。 可运行进程:使用 CPU 或等待使用 CPU 的进程 不可中断状态进程:正在等待某些 IO 访问,一般是和硬件交互,不可被打断(不可被打断的原因是为了保护系统数据一致,防止数据读取错误) 查看系统平均负载 首先top命令查看进程运行状态,如下: PID USER
腾讯技术工程官方号
2020/08/11
8.8K0
什么是平均负载?
分别表示: 当前时间、系统已经运行了多长时间、目前有多少登陆用户、系统在过去的1分钟、5分钟和15分钟内的平均负载。
袁新栋-jeff.yuan
2020/08/26
9550
从入门到转型之Linux性能优化实践学习指南
本系列是从入门到转型之Linux性能优化实践学习指南,是博主学习Linux性能优化之路的精华版本,我将分享大量性能优化的思路和方法,并进行相应工具使用介绍和总结。
全栈工程师修炼指南
2022/09/29
6160
从入门到转型之Linux性能优化实践学习指南
从平均负载开始,这进程是 CPU Bound 还是 IO Bound 的?
在排查性能问题的时候,我们经常会使用 top 或者 uptime 两个 Linux 命令,top 命令和 uptime 命令都会给出最近机器 1 min,5 min,15 min 的平均负载情况,一般平均负载值(Average Load)接近甚至超出 CPU cores (现在一般指 processors 的个数, 现在 CPU 的一个 core 一般有两个 processor, 可以处理两个进程) 时,系统会有性能瓶颈.
Cloud-Cloudys
2023/10/21
3030
从平均负载开始,这进程是 CPU Bound 还是 IO Bound 的?
Linux性能优化实战 笔记
平均负载是指单位时间内,系统处于可运行状态和不可中断状态的平均进程数,也就是平均活跃进程数,它和 CPU 使用率并没有直接关系。
OwenZhang
2021/12/08
1.8K0
Linux性能优化实战 笔记
性能分析(3)- 短时进程导致用户 CPU 使用率过高案例
并发 100 个请求测试 VM1 的 Nginx 性能,总共测试 1000 个请求
小菠萝测试笔记
2020/08/11
1.5K0
性能分析(3)- 短时进程导致用户 CPU 使用率过高案例
Linux stress命令详解
stress 命令主要用来模拟系统负载较高时的场景,本文介绍其基本用法。文中 demo 的演示环境为 ubuntu 18.04。
JavaEdge
2021/02/23
3.4K0
Linux stress命令详解
一秒内诊断 Linux 服务器的性能
60,000 毫秒内对 Linux 的性能诊断 当你为了解决一个性能问题登录到一台 Linux 服务器:在第一分钟你应该检查些什么? 在 Netflix,我们有一个巨大的 EC2 Linux 云,以及大量的性能分析工具来监控和诊断其性能。其中包括用于云监控的 Atlas,以及用于按需实例分析的 Vector。虽然这些工具可以帮助我们解决大多数问题,但我们有时仍需要登录到一个服务器实例,并运行一些标准 Linux 性能工具。 在这篇文章中,Netflix Performance Engineering 团
小小科
2018/05/04
1.5K0
一秒内诊断 Linux 服务器的性能
第十五章·Linux系统管理-进程管理
-多年互联网运维工作经验,曾负责过大规模集群架构自动化运维管理工作。 -擅长Web集群架构与自动化运维,曾负责国内某大型金融公司运维工作。 -devops项目经理兼DBA。 -开发过一套自动化运维平台(功能如下): 1)整合了各个公有云API,自主创建云主机。 2)ELK自动化收集日志功能。 3)Saltstack自动化运维统一配置管理工具。 4)Git、Jenkins自动化代码上线及自动化测试平台。 5)堡垒机,连接Linux、Windows平台及日志审计。 6)SQL执行及审批流程。 7)慢查询日志分析web界面。
DriverZeng
2022/09/26
1.1K0
第十五章·Linux系统管理-进程管理
linux性能优化心得
本文以 极客时间 倪鹏飞老师的专栏为基础进行的编写心得、由于本人水平有限,如果有什么不妥的地方,还请各位批评指正。
怀朔
2022/05/25
8840
Linux 性能优化的全景指南,可能都在这里了,建议收藏~
性能问题的本质就是系统资源已经到达瓶颈,但请求的处理还不够快,无法支撑更多的请求。性能分析实际上就是找出应用或系统的瓶颈,设法去避免或缓解它们。
用户6543014
2022/03/04
2.7K0
Linux 性能优化的全景指南,可能都在这里了,建议收藏~
如何分析系统平均负载过高的原因_线上cpu负载过高如何排查
我相信你应该用过uptime命令查询系统负载的情况,或者在各种监控终端上看到过系统load这一项,但是每次问别人到底什么是系统load?系统load到达多少算过高?又有哪些原因会造成系统load过载?我发现很少有人能回答清楚,大多数都觉得系统load过载就表示CPU使用率过载、然而实际上并不完全这样的,本文就来仔细分析一下到底有哪些原因会造成系统load过载!
全栈程序员站长
2022/09/30
2.5K0
如何分析系统平均负载过高的原因_线上cpu负载过高如何排查
相关推荐
性能测试必备知识(4)- 使用 stress 和 sysstat 分析平均负载过高的场景
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验