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

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

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

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

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

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

  

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

 # w
:: up days, :, user, load average: 0.42, 0.46, 0.41
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
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使用率

top - :: up  days,  :,   user,  load average: 0.34, 0.38, 0.40
Tasks: total, running, sleeping, stopped, zombie
%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
KiB Mem: total, used, free, buffers
KiB Swap: total, used, free. cached Mem PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
ntp S 47.2 0.0 : ntpd
ceilome+ S 5.0 0.5 :30.17 ceilometer-agen
rabbitmq S 1.7 2.2 : beam.smp
mysql S 1.0 2.5 :28.78 mysqld
nova S 1.0 0.8 :42.22 nova-conductor
root S 0.7 0.0 :22.74 kipmi0
nova S 0.7 0.9 :34.72 nova-conductor
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占用

 # iostat
Linux 3.13.--generic (ISeR-Server1) // _x86_64_ ( CPU) avg-cpu: %user %nice %system %iowait %steal %idle
4.62 0.02 2.20 0.55 0.00 92.60 Device: tps kB_read/s kB_wrtn/s kB_read kB_wrtn
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状况

 Total DISK READ :       0.00 B/s | Total DISK WRITE :     972.38 K/s
Actual DISK READ: 0.00 B/s | Actual DISK WRITE: 995.35 K/s
TID PRIO USER DISK READ DISK WRITE SWAPIN IO> COMMAND
be/ mysql 0.00 B/s 953.24 K/s 0.00 % 6.71 % mysqld
be/ root 0.00 B/s 0.00 B/s 0.00 % 1.50 % [jbd2/sda2-]
be/ mysql 0.00 B/s 7.66 K/s 0.00 % 0.80 % mysqld
be/ mysql 0.00 B/s 3.83 K/s 0.00 % 0.52 % mysqld
be/ mysql 0.00 B/s 0.00 B/s 0.00 % 0.30 % mysqld
be/ mysql 0.00 B/s 3.83 K/s 0.00 % 0.24 % mysqld
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使用

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

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

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

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

 # sar -b
Linux 3.13.--generic (ISeR-Server1) // _x86_64_ ( CPU) :: AM tps rtps wtps bread/s bwrtn/s
:: AM 7.44 0.00 7.44 0.00 279.22
:: AM 6.45 0.00 6.45 0.00 255.84
:: AM 6.59 0.00 6.59 0.00 260.20
:: AM 6.51 0.00 6.51 0.00 261.42
:: AM 6.42 0.00 6.42 0.00 255.79

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

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

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

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

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

 # sar -f /var/log/sysstat/sa08
Linux 3.13.--generic (ISeR-Server1) // _x86_64_ ( CPU) :: AM CPU %user %nice %system %iowait %steal %idle
:: AM all 3.65 0.02 2.79 0.60 0.00 92.94
:: AM all 3.45 0.02 3.03 0.56 0.00 92.94
:: AM all 3.43 0.02 3.25 0.56 0.00 92.74
:: AM all 3.44 0.01 3.09 0.56 0.00 92.89
:: AM all 3.25 0.02 1.35 0.55 0.00 94.83
:: 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. 淘宝业务常用english

    ADX        ad exchange 广告交易平台 coupon     赠品 CPC         cost per click CPS         cost per sales CT ...

  2. BZOJ-2002 弹飞绵羊 Link-Cut-Tree (分块)

    2002: [Hnoi2010]Bounce 弹飞绵羊 Time Limit: 10 Sec Memory Limit: 259 MB Submit: 6801 Solved: 3573 [Submi ...

  3. BZOJ-2037 Sue的小球 DP+费用提前

    似乎很早时学长考过很类似的? 2037: [Sdoi2008]Sue的小球 Time Limit: 10 Sec Memory Limit: 64 MB Submit: 558 Solved: 300 ...

  4. groovy-语句

    groovy语句类似于java语句,但是在groovy中的分号”;”是可选的.比如: 1 def x = [1, 2, 3] 2 println x 3 def y = 5; def x = y +  ...

  5. Codeforces 295A Greg and Array

    传送门 A. Greg and Array time limit per test 1.5 seconds memory limit per test 256 megabytes input stan ...

  6. UVA 1149 Bin Packing

    传送门 A set of n 1-dimensional items have to be packed in identical bins. All bins have exactly the sa ...

  7. ubuntu设置开机启动图形应用程序,替换默认图形桌面

    直接将启动程序放在rc.local即可.但是如果自动启动的程序奔溃后,会返回到ubuntu的unity桌面系统. 我遇到的问题是程序还有调用 xset 去定时关闭屏幕.在桌面启动后调用没问题.如果rc ...

  8. shell与变量的声明的操作

    1.给命令起别名:alias 执行下面命令后,可以使用dir代替ls –l 命令,显示目录中的文件详细信息: 还可以用一个别名表示几个命令 的结合: 2.ps:显示当前登录会话的所有活动进程: 3.更 ...

  9. 浅谈php对api开发的作用

    最近正在做一个手机APP的服务端API开发,虽然是基于Ruby on Rails的,做的也不太专业,不过大致相通,希望能够给你一些启发. 首先,如果是比较简单的手机APP,例如新闻客户端这样的不会涉及 ...

  10. Mysql数据库的工作原理