工作经常碰到负载过高,cpu占有太高,系统变慢,运维通常做的第一件事就是通过top或者uptime命令来了解系统负载的情况

通常uptime后会出现三个小数,就是平均负载值,那真正的了解这个平均负载值吗?

大多数运维小哥会说:平局负载不就是cpu使用率吗?上面三个数字分别代表不同时间段的cpu使用率吗?

其实并不是这样的.......

平均负载的详细解释:平均负载是指单位时间内,系统处于可运行状态和不可中断状态的平均进程数,也就是平均活跃进程数!和cpu使用率并没有直接关系

如果是工作中所期盼的,我们都希望平局负载最理想的状态的是等于cpu个数,所以,在通过命令来了解平均负载之前,我们应该先知道cpu的个数,才能更好的知道负载状态

#grep 'model name' /proc/cpuinfo | wc -l

当知道cpu个数后,如果平局负载值超过个数,就说明系统负载过高!!!

可是这样看来,既然平均负载代表的是活跃进程数,那平均负载高了,不就意味着 CPU 使用率高吗?

这里还得从理论来分析:平均负载是指单位时间内,处于可运行状态和不可中断状态的进程数。所以,它不仅包括了正在使用 CPU 的进程,还包括等待 CPU 和等待 I/O 的进程。

由此可见!CPU 使用率,是单位时间内 CPU 繁忙情况的统计,跟平均负载并不一定完全对应。

比如:

CPU 密集型进程,使用大量 CPU 会导致平均负载升高,此时这两者是一致的。

I/O 密集型进程,等待 I/O 也会导致平均负载升高,但 CPU 使用率不一 定很高。

大量等待 CPU 的进程调度也会导致平均负载升高,此时的 CPU 使用率也会比较高。

这里做一个小实验

模拟负载过高,来做分析

这里我用到的系统是 :

系统: RedFlag-Asianux-7.6
内核版本 3.10.0-957

注:其他的linux系统也可以做

要下一个压力测试包:stress-1.0.4-6.7.rpm

这个包各大镜像站网源有,可以查到并下载

这里分析两个立志;一个是模拟cpu使用率过高    |   一个模拟I/O压力过大


案例一:

下载安装后,开启三个终端,并在一个终端进行施压模拟,同时在另外两个终端进行排查分析

第一个终端:  模拟施压

#stress --cpu 1 --timeout 500

第二个终端:  查看平局负载

#uptime

#watch -d uptime

第三个终端;   找出引起负载过高的进程

#pidstat -u 5 1


案例二:

模拟i/o压力,首先还是使用stress命令来测试

第一个终端:

#stress -i 1 --timeout 600

第二个终端:

#uptime

#mpstat -P ALL 5 1

通过mpstat可以看出,平局负载过高是iowait引起的,那么到底是哪个进程,导致 iowait 这么高呢?我们还是用 pidstat 来查询(如:案例一)

-----

如何快速定位到是哪一个进程导致load过高

1,top  命令使用:总体查看各项信息,看看cpu占用率高的进程是什么(谨慎使用top,如果机器负载很高,最好不要使用)

2,ps  ux  :通过此命令,看第四列的%cpu  ,看看哪个进程占用过高

3,ps -Lp 进程PID  cu   :查看进程下线程占用cpu的使用情况

3,jstack   -l / -F  进程PID  >  打印到的文件   :查看进程的详细信息并分析它占用率高的原因


综上所例:

  平均负载提供了一个快速查看系统整体性能的手段,反映了整体的负载情况。但只看平均负载本身,我们并不能直接发现,到底是哪里出现了瓶颈。所以,在理解平均负载时,也要注意:

(1)平均负载高有可能是 CPU 密集型进程导致的;

(2)平均负载高并不一定代表 CPU 使用率高,还有可能是 I/O 更繁忙了;

(3)当发现负载高的时候,你可以使用 mpstat、pidstat 等工具,辅助分析负载的来源

理解cpu过高的逻辑思维与分析方法的更多相关文章

  1. MySQL CPU 使用率高的原因和解决方法

    用户在使用 MySQL 实例时,会遇到 CPU 使用率过高甚至达到 100% 的情况.本文将介绍造成该状况的常见原因以及解决方法,并通过 CPU 使用率为 100% 的典型场景,来分析引起该状况的原因 ...

  2. C# Winform程序CPU占用高的原因和解决方法

    程序CPU占用高的可能原因: 1.存在死循环: 为什么死循环会导致CPU占用高呢?      虽然分时操作系统是采用时间片的机制对CPU的时间进行管理的,也就是说到了一定时间它会自动从一个进程切换到下 ...

  3. 查询执行成本高(查询访问表数据行数多)而导致实例 CPU 使用率高是 MySQL 非常常见的问题

    MySQL CPU 使用率高的原因和解决方法_产品性能_常见问题_云数据库 RDS 版-阿里云 https://help.aliyun.com/knowledge_detail/51587.html ...

  4. Linux下java进程CPU占用率高分析方法

    Linux下java进程CPU占用率高分析方法 在工作当中,肯定会遇到由代码所导致的高CPU耗用以及内存溢出的情况.这种情况发生时,我们怎么去找出原因并解决. 一般解决方法是通过top命令找出消耗资源 ...

  5. CPU占用率高分析方法步骤[转载]

    由于涉及到私有代码,所有图片都隐去 1.执行TOP命令,确认CPU占用较高的进程PID 根据top命令,发现PID为8691的Java进程占用CPU高达3858%,出现故障 2.确认该进程中CPU占用 ...

  6. 服务器CPU使用率高的原因分析与解决办法

    我们的服务器在使用操作系统的时候,用着用着系统就变慢了,打开“ 任务管理器 ”一看,才发现CPU使用率达到80%以上.这是怎么回事情呢?遇到病毒了吗?硬件有问题?还是系统设置有问题呢?在本文中将从硬件 ...

  7. 性能测试三十九:Jprofiler分析CPU过高和响应时间长的问题

    使用Jprofiler监控分析案例 一.cpu负载过高:http://localhost:8080/PerfTeach/CpuTopServlet?id=1 cpu消耗高的可能原因1.使用了复杂的算法 ...

  8. MySQL CPU %sys 高的案例分析(三)

    [现象] 最近有台服务器晚上CPU告警,系统抓取的故障期间的snapshot显示CPU %sys较高,同时context switch在300K以上. 是否过高的context switch引起的%s ...

  9. JVM进程cpu飙高分析

    在项目快速迭代中版本发布频繁  近期上线报错一个JVM导致服务器cpu飙高 但内存充足的原因现象.  对于耗内存的JVM程序来而言,  基本可以断定是线程僵死(死锁.死循环等)问题. 这里是纪录一下排 ...

  10. (转)Linux下java进程CPU占用率高-分析方法

    Linux下java进程CPU占用率高-分析方法 原文:http://itindex.net/detail/47420-linux-java-%E8%BF%9B%E7%A8%8B?utm_source ...

随机推荐

  1. 数据类型之字符串(string)(三)

    其他操作 1.len():求序列长度,返回数字 a = 'my name is wang'len(a) 返回 15 空格也占一个位置. 2.+:连接2个字符串 >>> b = 'wh ...

  2. SAP 交货单抬头客制化界面以及字段

    需求 因为涉及系统之间的家伙但传输,方便业务查看该交货单是否已经发送,因此再交货单的抬头页面进行增强,给出一个是否发送的字段显示.如下: 业务加载项 LE_SHP_TAB_CUST_HEAD se19 ...

  3. 回归分析-2.X 简单线性回归

    2.1 简单线性回归模型 y与x之间的关系假设 \(y=\beta_0+\beta_1x+\varepsilon\) \(E(\varepsilon|x)=0\) \(Var(\varepsilon| ...

  4. Oracle 详细-创建用户并导入sql文件

       0.基本信息查询SQL   select * from dba_users; 查看数据库里面所有用户,前提是你是有dba权限的帐号,如sys,system select * from all_u ...

  5. Java Development Kit下载地址

    Java Development Kit下载地址 官网下载 一般最新版本无需登录即可下载,其他历史版本需要登录Oracle账户才可以下载. 最新版下载地址: https://www.oracle.co ...

  6. iOS开发-应用评分引导

    导入头文件#import <StoreKit/StoreKit.h>+ (void)yoStoreReview{ if (@available(iOS 10.3, *)) { if ([S ...

  7. ENGG1310 P2.1 Intro to CE Computer Systems, Programming & Networking

    课程内容笔记,自用,不涉及任何 assignment,exam 答案 Notes for self-use, do not include any assignments or exams H/W & ...

  8. MassTransit - .NET Core 的分布式应用程序框架

    简介 MassTransit 是一个免费的.开源的.NET 分布式应用程序框架.MassTransit 使创建应用程序和服务变得容易,这些应用程序和服务利用基于消息的松散耦合异步通信来实现更高的可用性 ...

  9. 软件工程日报八——AlertDiatog的使用

    今天学习了AlertDiatog的相关内容 AlertDialog可以在当前的界面上显示一个对话框,这个对话框是置顶于所有界面元素之上的,能够屏蔽掉其他控件的交互能力,因此AlertDialog一般是 ...

  10. 性能测试-ps与vmstat

    1.ps命令-获取当前系统的进程状态 ps >ps(process status) 获取帮助: man ps 获取当前系统的进程状态 ps-ef-eF-elv 使用标准语法查看系统上的每个进程 ...