本随笔介绍CPU负载的排查手段。

  查看系统负载的工具:uptime,w,都能查看系统负载,系统平均负载是处于运行不可打扰状态的进程的平均数,

  •   可运行:运行态,占用CPU,或就绪态,等待CPU调度。
  •   不可打扰:阻塞,正在等待I/O

例1. 使用uptime查看系统负载

  1. # uptime
  2. :: up days, :, user, load average: 0.67, 0.51, 0.41

  这里我们关注的是最后三列,即系统1分钟、5分钟、15分钟内的平均负载,判断一个系统负载是否偏高需要计算单核CPU的平均负载,等于这里uptime命令显示的系统平均负载 / CPU核数,一般以0.7为比较合适的值。偏高说明有比较多的进程在等待使用CPU资源。

  

例2. 使用w查看系统负载

  1. # w
  2. :: up days, :, user, load average: 0.42, 0.46, 0.41
  3. USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
  4. openstac pts/ 10.14.16.25 : .00s .19s .03s sshd: openstack [priv]

  使用 w 命令也可以查看类似的信息,w 命令还提供了当前登录用户,以及正在执行的操作等信息。

  系统负载可以是CPU密集型的,也可以是RAM密集型和I/O密集型的,CPU密集型的系统比I/O密集型的系统响应度更好,因为I/O密集型的系统的磁盘I/O可能完全饱和,导致登录就很费事。

2. top命令

  top命令不仅可以查看当前系统的平均负载,还可以查看不同进程对于CPU、内存等资源的使用情况,在内存排障部分我们也将介绍top命令。

例3. 使用top命令查看CPU使用率

  1. top - :: up days, :, user, load average: 0.34, 0.38, 0.40
  2. Tasks: total, running, sleeping, stopped, zombie
  3. %Cpu(s): 4.0 us, 6.1 sy, 0.0 ni, 88.0 id, 1.5 wa, 0.0 hi, 0.4 si, 0.0 st
  4. KiB Mem: total, used, free, buffers
  5. KiB Swap: total, used, free. cached Mem
  6.  
  7. PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
  8. ntp S 47.2 0.0 : ntpd
  9. ceilome+ S 5.0 0.5 :30.17 ceilometer-agen
  10. rabbitmq S 1.7 2.2 : beam.smp
  11. mysql S 1.0 2.5 :28.78 mysqld
  12. nova S 1.0 0.8 :42.22 nova-conductor
  13. root S 0.7 0.0 :22.74 kipmi0
  14. nova S 0.7 0.9 :34.72 nova-conductor
  15. glance S 0.7 0.7 :00.03 glance-api

  例3给出了一个top命令的截图示意,默认情况下,top命令是以CPU使用率由高到低排序显示进程信息的,在 top 信息界面按 K 键,并输入想要终止的PID,就可以直接杀死指定进程。

  top的 -b 选项开启批处理模式,将每次刷新全部打印到stdout

  top的 -n 选项指定退出top命令前刷新多少次信息。

  top命令的输出:

  第1行:与uptime相同;

  第3行:当前的CPU运行情况:

    us:非nice用户进程占用CPU的比率

    sy:内核、内核进程占用CPU的比率;

    ni:如果一些用户进程修改过优先级,这里显示这些进程占用CPU时间的比率;

    id:CPU空闲比率,如果系统缓慢而这个值很高,说明系统慢的原因不是CPU负载高;

    wa:CPU等待执行I/O操作的时间比率,该指标可以用来排查磁盘I/O的问题,通常结合wa和id判断

    hi:CPU处理硬件终端所占时间的比率;

    si:CPU处理软件终端所占时间的比率;

    st:流逝的时间,虚拟机中的其他任务所占CPU时间的比率;

  用户进程占比高,wa低,说明系统缓慢的原因在于进程占用大量CPU,通常还会伴有教低的id,说明CPU空转时间很少;

  wa低,id高,可以排除CPU资源瓶颈的可能。  

  wa高,说明I/O占用了大量的CPU时间,需要检查交换空间的使用,交换空间位于磁盘上,性能远低于内存,当内存耗尽开始使用交换空间时,将会给性能带来严重影响,所以对于性能要求较高的服务器,一般建议关闭交换空间。另一方面,如果内存充足,但wa很高,说明需要检查哪个进程占用了大量的I/O资源。

3. iostat命令

  iostat命令可以查看系统分区的IO使用情况

例4. iostat命令查看系统IO占用

  1. # iostat
  2. Linux 3.13.--generic (ISeR-Server1) // _x86_64_ ( CPU)
  3.  
  4. avg-cpu: %user %nice %system %iowait %steal %idle
  5. 4.62 0.02 2.20 0.55 0.00 92.60
  6.  
  7. Device: tps kB_read/s kB_wrtn/s kB_read kB_wrtn
  8. sda 5.91 4.16 130.04

  在第2行系统发行版本下面的第4、5行,可以看到与top命令中CPU使用情况类似的信息,

  第7行,可以看到一些IO指标:

    tps: 每秒I/O传输请求量;

    kB_read/s:每秒读取多少KB;

    kB_wrtn/s:每秒写多少KB;

    kB_read:一共读了多少KB;

    kB_wrtn:一共写了多少KB。

  iostat命令属于sysstat工具包,由于我们的机器只挂载了一块硬盘,因此不能体现不同设备的I/O区别。

4. iotop命令

  iotop命令类似于top命令,但是显示的是各个进程的I/O情况,对于定位I/O操作较重的进程有比较大的作用。

例5. iotop命令与进程的IO状况

  1. Total DISK READ : 0.00 B/s | Total DISK WRITE : 972.38 K/s
  2. Actual DISK READ: 0.00 B/s | Actual DISK WRITE: 995.35 K/s
  3. TID PRIO USER DISK READ DISK WRITE SWAPIN IO> COMMAND
  4. be/ mysql 0.00 B/s 953.24 K/s 0.00 % 6.71 % mysqld
  5. be/ root 0.00 B/s 0.00 B/s 0.00 % 1.50 % [jbd2/sda2-]
  6. be/ mysql 0.00 B/s 7.66 K/s 0.00 % 0.80 % mysqld
  7. be/ mysql 0.00 B/s 3.83 K/s 0.00 % 0.52 % mysqld
  8. be/ mysql 0.00 B/s 0.00 B/s 0.00 % 0.30 % mysqld
  9. be/ mysql 0.00 B/s 3.83 K/s 0.00 % 0.24 % mysqld
  10. be/ mysql 0.00 B/s 3.83 K/s 0.00 % 0.22 % mysqld

  这里可以看到不同任务的读写强度。

二、 sysstat工具与负载历史回放

  很多系统负载过高的时候我们是无法立即获知或者立即解决的,当检测到或者知道历史的高负载状况时,可能需要回放历史监控数据,这时 sar 命令就派上用场了,sar命令同样来自sysstat工具包,可以记录系统的CPU负载、I/O状况和内存使用记录,便于历史数据的回放。

  Ubuntu系统上,sysstat的配置文件在/etc/default/sysstat,sysstat默认关闭,通过将该文件中的ENABLED改为"true"启用;历史日志的存放位置为/var/log/sysstat

  Red Hat系统上,sysstat的配置文件在/etc/sysconfig/sysstat文件,历史日志的存放位置为/var/log/sa

  两种系统上,统计信息都是每10分钟记录一次,每天的23:59会分割统计文件,这些操作的频率都在/etc/cron.d/sysstat文件配置。

1. sar命令查看CPU、内存和磁盘记录

  默认情况下,sar命令显示当天的统计信息,不带参数显示CPU统计信息,参数-r显示收集的内存记录,-b显示磁盘I/O

例6. 使用sar命令查看当天CPU使用

  1. # sar
  2. Linux 3.13.--generic (ISeR-Server1) // _x86_64_ ( CPU)
  3.  
  4. :: AM CPU %user %nice %system %iowait %steal %idle
  5. :: AM all 3.83 0.02 4.24 0.61 0.00 91.30
  6. :: AM all 3.57 0.02 4.28 0.58 0.00 91.54
  7. :: AM all 3.83 0.02 5.16 0.60 0.00 90.39
  8. :: AM all 3.98 0.02 5.66 0.58 0.00 89.76
  9. :: AM all 3.86 0.02 5.26 0.59 0.00 90.28
  10. :: AM all 3.77 0.02 5.19 0.60 0.00 90.42

例7. 使用sar命令查看当天内存使用

  1. # sar -r
  2. Linux 3.13.--generic (ISeR-Server1) // _x86_64_ ( CPU)
  3.  
  4. :: AM kbmemfree kbmemused %memused kbbuffers kbcached kbcommit %commit kbactive kbinact kbdirty
  5. :: AM 47.63 55.56
  6. :: AM 47.61 55.72
  7. :: AM 47.55 55.59
  8. :: AM 47.61 55.60
  9. :: AM 47.58 55.65

例8. 使用sar命令查看当天IO统计记录

  1. # sar -b
  2. Linux 3.13.--generic (ISeR-Server1) // _x86_64_ ( CPU)
  3.  
  4. :: AM tps rtps wtps bread/s bwrtn/s
  5. :: AM 7.44 0.00 7.44 0.00 279.22
  6. :: AM 6.45 0.00 6.45 0.00 255.84
  7. :: AM 6.59 0.00 6.59 0.00 260.20
  8. :: AM 6.51 0.00 6.51 0.00 261.42
  9. :: AM 6.42 0.00 6.42 0.00 255.79

2. 使用sar查看指定时间、指定日期的历史记录

例9. 使用参数-s和-e限定查看的时间

  1. # sar -s ::
  2. Linux 3.13.--generic (ISeR-Server1) // _x86_64_ ( CPU)
  3.  
  4. :: PM CPU %user %nice %system %iowait %steal %idle
  5. :: PM all 3.98 0.02 6.07 0.58 0.00 89.34
  6. :: PM all 4.32 0.02 5.74 0.58 0.00 89.34
  7. Average: all 4.15 0.02 5.91 0.58 0.00 89.34

  例9 只查看当天20:00:00后的CPU统计记录

例10. 使用参数-f查看本月内之前某一天的历史统计信息

  1. # sar -f /var/log/sysstat/sa08
  2. Linux 3.13.--generic (ISeR-Server1) // _x86_64_ ( CPU)
  3.  
  4. :: AM CPU %user %nice %system %iowait %steal %idle
  5. :: AM all 3.65 0.02 2.79 0.60 0.00 92.94
  6. :: AM all 3.45 0.02 3.03 0.56 0.00 92.94
  7. :: AM all 3.43 0.02 3.25 0.56 0.00 92.74
  8. :: AM all 3.44 0.01 3.09 0.56 0.00 92.89
  9. :: AM all 3.25 0.02 1.35 0.55 0.00 94.83
  10. :: AM all 3.36 0.02 1.77 0.56 0.00 94.29

  sysstat工具只存储1个月内的系统使用记录,每天的记录以saN为文件名保存在相应的日志目录中,这里我们查看本月8号的CPU使用记录。

Linux系统排查2——CPU负载篇的更多相关文章

  1. Linux系统排查3——I/O篇

    当磁盘无法写入的时候,一般有以下可能: 文件系统只读 磁盘已满 I节点使用完 一. 遇到只读的文件系统 文件系统自动设置成只读可能是系统自我保护的一种机制,因此需要实现弄清究竟是什么原因造成了文件系统 ...

  2. 操作系统复习——如何查看一个进程的详细信息,如何追踪一个进程的执行过程 ,如何在 Linux 系统下查看 CPU、内存、磁盘、IO、网卡情况?epoll和select区别?

    1. 如何查看一个进程的详细信息,如何追踪一个进程的执行过程 通过pstree命令(根据pid)进行查询进程内部当前运行了多少线程:# pstree -p 19135(进程号) 使用top命令查看(可 ...

  3. Linux系统排查——CPU负载篇

    本随笔介绍CPU负载的排查手段. 查看系统负载的工具:uptime,w,都能查看系统负载,系统平均负载是处于运行或不可打扰状态的进程的平均数, 可运行:运行态,占用CPU,或就绪态,等待CPU调度. ...

  4. Linux系统排查1——内存篇

    常见工作中,计算机系统的资源主要包括CPU,内存,硬盘以及网络,过度使用这些资源将使系统陷入困境.本系列一共四篇博文,结合我在实习期间的学习,介绍一些常见的Linux系统排障工具及方法. 第1篇——内 ...

  5. linux硬件资源问题排查:cpu负载、内存使用情况、磁盘空间、磁盘IO

    在使用过程中之前正常的功能,突然无法使用,性能变慢,通常都是资源消耗问题,资源消耗可以从以下几个方面去排查.对于已经安装硬件资源监控软件(zabbix)的环境,直接使用硬件资源监控软件(zabbix) ...

  6. Linux系统排查4——网络篇

    用于排查Linux系统的网络故障. 网络排查一般是有一定的思路和顺序的,其实排查的思路就是根据具体的问题逐段排除故障可能发生的地方,最终确定问题. 所以首先要问一问,网络问题是什么,是不通,还是慢? ...

  7. (转)Linux系统排查4——网络篇

    原文:http://www.cnblogs.com/Security-Darren/p/4700387.html 用于排查Linux系统的网络故障. 网络排查一般是有一定的思路和顺序的,其实排查的思路 ...

  8. Linux系统(四)负载均衡LVS集群之NAT模式

    序言 提到LVS,就从章文嵩博士开始吧,反正也不知道如何下笔来写这一篇.章大博士,读博时候创建这个lvs软件项目,但是他提倡开源精神,在用户的建议和反馈中,这个花了他两周时间开发的开源软件不断得到改建 ...

  9. Linux系统(五)负载均衡LVS集群之DR模式

    序言 DR模式是lvs集群中三种负载均衡模式的其中一种,那么上一篇中我写啦关于NAT模式的搭建与原理,为什么还要有DR模式与IP隧道模式呢? 首先我们来看3张图.LVS/NAT模式如下图: LVS/I ...

随机推荐

  1. 【poj2079】 Triangle

    http://poj.org/problem?id=2079 (题目链接) 题意 求凸包内最大三角形面积 Solution 旋转卡壳. 只会n²的做法,但是竟然过了.就是枚举每一个点,然后旋转卡壳另外 ...

  2. java 文件读取大全

    1.按字节读取文件内容2.按字符读取文件内容3.按行读取文件内容 4.随机读取文件内容 public class ReadFromFile {     /**      * 以字节为单位读取文件,常用 ...

  3. 用 AIML 开发人工智能聊天机器人

    借助 Python 的 AIML 包,我们很容易实现人工智能聊天机器人.AIML 指的是 Artificial Intelligence Markup Language (人工智能标记语言),它不过是 ...

  4. 轻量级应用开发之(02)UIView

    一 控件 1.屏幕上的所有UI元素都叫做控件(也有叫做视图.组件)比如按钮(UIButton).文本(UILabel)都是控件. 2.控件的共同属性有哪些? 尺寸,位置,背景色 3. 苹果将控件的共同 ...

  5. 如何查看mysql索引

    show index from tableName; show keys from tableName; · Table表的名称.· Non_unique如果MySQL索引不能包括重复词,则为0.如果 ...

  6. form表单那点事儿(上) 基础篇

    form表单那点事儿(上) 基础篇 做为html中最为常见,应用最广泛的标签之一,form常伴随前端左右.了解更深,用的更顺. 目录: 表单属性 表单元素 常识 模拟外观 表单属性 这个表单展示了fo ...

  7. 超详细cordova环境配置(windows)及实例

    摘要: 最近闲来无事就把以前做的cordova项目整理了下,发现网上很少有详细完整的配置教程,所以自己就总结了下分享给大家. 项目地址:https://github.com/baixuexiyang/ ...

  8. Integer Inquiry

    Integer Inquiry Time Limit:1000MS     Memory Limit:10000KB     64bit IO Format:%I64d & %I64u Sub ...

  9. 一个1年前的T-SQL问题

    还记得年前的一个SQL问题,当时对SQL刚接触,因此绕开了它.用了别的办法.昨天看SQL突然想起了这个问题.百思不得其解,然后去SQL Server技术交流群,也请教了,大神高文佳,何志勇提示我因为先 ...

  10. Toast工具类,Android中不用再每次都写烦人的Toast了

    package com.zhanggeng.contact.tools; /** * Toasttool can make you use Toast more easy ; * * @author ...