负载可以说是一个服务器是否正常的风向标,当接入的软件运行缓慢的时候,相信大部分人排查线上服务器第一件事就是要看下负载的高低?通过uptime命令可以直观的看到系统1、5、15分钟内的平均负载值,本文简称为负载。那么关于负载就有一些有意思的话题了。如什么是负载,如何判定负载的高低?那些原因导致负载升高?下面结合我的一些工作经验简单聊一聊。

什么是负载?

在我最早接触负载一词的时候,大脑里的印象就是衡量服务器的繁忙程度,因此服务器的负载不能太高,高了的话服务器就忙不过来了。我对负载这样的认识一直大概保持了一年半,后来还是因为有个原 因,于是去 man uptime

关于负载的解释,uptime上有算是较为详细的说明:

System load averages is the average number of processes that are either in a runnable or uninterruptable state. A process in a runnable state is either using the CPU or waiting to use the CPU. A process in uninterruptable state is waiting for some I/O access, eg waiting for disk. The averages are taken over the three time intervals. Load averages are not normalized for the number of CPUs in a system, so a load average of 1 means a single CPU system is loaded all the time while on a 4 CPU system it means it was idle 75% of the time.

根据以上的描述,负载的概念就清晰起来了,首先负载是什么? 负载是一个平均进程数。那么,是所有状态下的进程数吗?不是的,对进程的状态有要求,就是进程的状态需要处于 runnable state(可运行状态) 和 uninterrupttable state(不可中断状态)。

ok,现在的重点来到了这两种状态的进程的理解上,何为 runnable 状态,上面也给出了清晰的解释,就是要么进程正在使用cpu,要么正在等待着使用cpu。对这句解释稍作补充,在一个进程的生命周期中,会有不同状态,处于runnable状态的进程代表着一切资源准备就绪了(cpu资源除外),那么就会有两种情况,一种是已经获得了cpu资源的,那么就代表着他正在使用cpu资源进行运行,另外一种就是他在排队等待cpu资源。(进程调度器会为使用cpu资源的进程维护一个队列)因为linux是多用户多进程系统,进程数量一般远大于cpu数量,因此cpu的资源是珍贵的,使用需要申请和排队。

何为uninterruptable 状态?,就是进程正在等待一些IO的请求,诸如磁盘IO/网络IO。说实在的,对于这个理解我还只能停留在表面。uninterruptable和 interruptable都是进程的sleep状态。我们可以理解为进程在睡觉(进程要继续运行的条件和资源不充分,因此他们要睡觉),进入这两种状态下,他们会立即释放掉cpu资源,不同点在于,处于interruptable是一种浅睡,任何的风吹草动(信号)都会惊醒他,然后他就会醒来接着干活。那么uninterruptable 就是一种沉睡,只有他等到的东西等来了他才醒来。

总结来说,负载数值即是处于runnable state 和uninterruptable state 的进程数。可以大致理解为系统正在处理的进程数。

如何判断负载的高低?

记得毕业后刚入职几个月的时候,适逢双十一,上面分了几台小的服务器,让盯梢负载。然后,我问旭哥说多高负载算高,旭哥说超过1就很高了。所以,从此我就记住了,负载高于1就高了。直到有一次一个持有相同概念的同事被另外一个同事鄙视后,我偷偷弄明白了负载后,负载高于1就过载的说法就不攻自破了。

关于负载过1就过载的说法在只有一个cpu的情况下是可以理解的,因为一个cpu同一时刻只能处理一个进程,所以刚好是100%的满负荷运行。但是在一个四核的机器上,无异于其他三个cpu在空闲着。所以看负载是否过载,要有一个前提,那就是需要明确有几个cpu,如果负载数长时间高于cpu数,那么就可以判断为过载。

cat /proc/cpuinfo

以上命令可以查看cpu的个数。但这并不是说,我们都要线上的机器都要满负荷的去跑,肯定是要有一定的余量的,至于余多少,可以根据自己业务的访问情况决定。

那些原因导致负载升高?

有了对负载本质的了解,就不难分析出负载较高的情况了?导致负载升高的原因无非有两个原因,一个是处于 runnable state 的进程不断增多,另一个是处于 uninterruptable state的进程不断增多。runnable state 增多一般是cpu资源不够,而uninterruptable state增多大部分时间是磁盘IO成为瓶颈。

cpu资源不够,为了方便理解,我们可以假设机器只有一个cpu,而每个进程处理需要1s,但是每1s就会2个进程需要处理,此时每1过1s就会累积一个进程处理不掉,那么负载自然就不断的增加
IO成为瓶颈,有的时候cpu利用率不是很高,但是负载依然会很高,比如大量的读请求,导致磁盘io成为瓶颈,此时进程在等待磁盘IO的同时是不可中断的状态,因此仍然会参与负载值的计算,因此负载会变高

个人遇到的一些导致负载升高的原因

本人从事电商ERP系统开发,服务器中安装有mysql服务器,因此一般情况下,出问题大部分是mysql中的一些问题。

1、大量数据请求时,包括搜索时全表扫描、以及大量的导出数据等。这种情况下一般大量的读请求让IO成为瓶颈,导致其他进程也处理缓慢,因此随着时间的增加负载就会升高

2、事务未提交,一般一些业务处理系统,耦合关系强,如订单的出库和库存的关系,一般是需要原子性操作,这个时候一般会使用事务来进行控制,但是不幸出现事务未提交的情况,会导致大量资源被锁,其他请求处于长时间等待的情况,这种情况也会导致负载升高

3、死锁,mysql的死锁检测以及回滚都会有一定的时间,加之事务对资源的独占,出现死锁会出现短暂的拥堵现象,同时负载的短时间内上升,不过后面继续会下降。但是死锁很频繁的情况下,负载也会一直较高

4、内存不足时,mysql服务器是相当耗费内存的,如果内存不足导致交换分区长时间使用的话,也会让机器负载升高

5、其他导致的一些IO问题,如磁盘损坏以及磁盘空间不足

CPU使用率

在一段时间内,每个时间片被充分使用的比例,提现了CPU的忙绿程度。而服务器负载可以理解为CPU还有多少事情要去做,如果发现CPU使用率正常,但是负载很高,那说明存在IO阻塞等待了。

关于服务器的负载和CPU的使用率相关推荐

  1. CPU负载与CPU使用率

    CPU负载与CPU使用率 1. CPU 负载与 CPU 使用率 2. 计算CPU使用率 2.1 使用vmstat获取 CPU 使用率 2.1.1 vmstat工具 2.1.2 参数用法 2.1.3 使 ...

  2. 理解Linux系统平均负载和CPU使用率

    CPU 使用率 CPU 使用率就是 CPU 非空闲态运行的时间占比,它反映了 CPU 的繁忙程度.比如,单核 CPU 1s 内非空闲态运行时间为 0.8s,那么它的 CPU 使用率就是 80%:双核 ...

  3. linux中负载值为多少正常_Linux中CPU负载和CPU使用率表示的含意,多大负载算高...

    Linux中CPU负载和CPU使用率表示的含意,多大负载算高 收到zabbix 警报信息,发现其中一台服务器CPU负载过重 报警值为4 一.警报信息的三个参数到底是什么意思? 9.73.10.67.1 ...

  4. 宝塔可以修改服务器内存限制吗,宝塔内存使用率很高的解决方法 cpu过高这样做!...

    不得不说,宝塔面板还是比较好用的,尤其是在用户体验方面做得不错,值得站长朋友们使用.倡萌会继续发布使用宝塔面板的一些技巧文章,欢迎继续关注WordPress大学. 开启监控功能 监控功能对于了解服务器 ...

  5. linux php cpu,理解Linux CPU负载和 CPU使用率

    CPU负载和 CPU使用率 这两个从一定程度上都可以反映一台机器的繁忙程度. cpu使用率反映的是当前cpu的繁忙程度,忽高忽低的原因在于占用cpu处理时间的进程可能处于io等待状态但却还未释放进入w ...

  6. CPU 负载与 CPU 使用率可不是一回事

    1.简介 存储.内存和 CPU(中央处理器)等系统资源不足会极大地影响应用程序的性能.因此,监控这些组件至关重要. 与磁盘和内存不同,监控 Linux 系统上的 CPU 使用率并不那么简单.在本文中, ...

  7. 平均负载与 CPU 使用率

    一.什么是平均负载 正确定义:单位时间内,系统中处于可运行状态和不可中断状态的平均进程数. 错误定义:单位时间内的cpu使用率. 可运行状态的进程:正在使用cpu或者正在等待cpu的进程,即ps au ...

  8. Linux CPU 100%问题 | 理解 CPU负载和 CPU使用率

    CPU 负载和 CPU 使用率 这两个从一定程度上都可以反映一台机器的繁忙程度. CPU 使用率反映的是当前 CPU 的繁忙程度,忽高忽低的原因在于占用 CPU 处理时间的进程可能处于 IO 等待状态 ...

  9. 1、cpu平均负载和cpu使用率 排查cpu使用高问题

    自定义标题 1. CPU 2. CPU 使用率 3. 测试: 4. 总结 1. CPU cpu平均负载 uptime 或 top 查看 cpu 平均负载(平均负载是指单位时间内,系统处于可运行状态和不 ...

最新文章

  1. 【Codeforces】1111B - Average Superhero Gang Power
  2. 编写 DockerFile
  3. C语言必学的12个排序算法:基数排序
  4. linux服务器基本常识,服务器搭建-Linux基础知识
  5. tortoisegit图标消失_TortoiseGit文件夹和文件图标不显示解决方法
  6. jQuery实现PC端商城购物车模块基本功能(每个商品的小计和合计都会根据添加和删除的操作来动态计算)
  7. Java lang3的 StringUtils.isNumeric(str)不能识别负数和小数
  8. 系统架构设计师-软件开发模型(螺旋模型)
  9. 看完这篇 Linux 的基本操作你就会了!
  10. 如何使用cmd进入打印机选项_命令行方式添加打印机
  11. mysql聚集索引与非聚集索引
  12. A Survey on Conversational Recommender Systems
  13. PHP程序提示验证码错误的问题(输入了正确的验证码)
  14. 编译原理实验二-逆波兰式生成程序
  15. 设置文件编译规则的makefile---配置编译器环境的c_pp_properties.json---设置的文本配置seting.json
  16. 为什么不从列表继承 T ?
  17. php实现wav转mp3,php实现将wav文件转换成图像文件并在页面中显示的方法
  18. oracle 数据字典画报,数据字典视图之:DBA_LOGSTDBY_LOG结构
  19. 360浏览器 Adobe Flash Player插件怎么开启
  20. 搭建简单的淘宝优惠劵网站

热门文章

  1. C语言编写的坦克大战exe小游戏
  2. 旭辉集团青睐用友NC解决方案
  3. android 音频开发之混响效果
  4. 某宝虚拟CDK自动发货源码 易语言
  5. 仿 36Kr Banner
  6. 在阿里工作几年,女友跑路,晋升无望,买不起房,我活成了一个笑话~
  7. 流量红利后期低成本的获客方式
  8. Python根据IP查找所在地理位置与运营商
  9. vijos1404 遭遇战
  10. 无盘服务器内存温度过高死机,电脑CPU温度过高经常死机怎么解决