Linux系统排查2——CPU负载篇

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

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

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

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

# uptime
 19:26:17 up 49 days,  7:34,  1 user,  load average: 0.67, 0.51, 0.41

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

  

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

1 # w
2  19:29:47 up 49 days,  7:38,  1 user,  load average: 0.42, 0.46, 0.41
3 USER     TTY      FROM             [email protected]   IDLE   JCPU   PCPU WHAT
4 openstac pts/1    10.14.16.25      19:21    1.00s  0.19s  0.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 - 19:36:00 up 49 days,  7:44,  1 user,  load average: 0.34, 0.38, 0.40
Tasks: 216 total,   3 running, 213 sleeping,   0 stopped,   0 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:  12260128 total,  6160704 used,  6099424 free,   331448 buffers
KiB Swap:        0 total,        0 used,        0 free.  1393220 cached Mem

  PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND
 3460 ntp       20   0   33508   2180   1536 S  47.2  0.0   5765:44 ntpd
12781 ceilome+  20   0  137464  60096   4740 S   5.0  0.5 833:30.17 ceilometer-agen
 2816 rabbitmq  20   0 2482652 274620   2612 S   1.7  2.2   1222:49 beam.smp
 1501 mysql     20   0  655848 310788   9928 S   1.0  2.5 368:28.78 mysqld
 2781 nova      20   0  355508 104096   3944 S   1.0  0.8 284:42.22 nova-conductor
  410 root      39  19       0      0      0 S   0.7  0.0 409:22.74 kipmi0
 2782 nova      20   0  356304 105000   3936 S   0.7  0.9 249:34.72 nova-conductor
19305 glance    20   0  182964  88608   4800 S   0.7  0.7 461: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.0-55-generic (ISeR-Server1)     08/12/2015     _x86_64_    (4 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   17735179  554343984

  在第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  1651 be/4 mysql       0.00 B/s  953.24 K/s  0.00 %  6.71 % mysqld
 5   189 be/3 root        0.00 B/s    0.00 B/s  0.00 %  1.50 % [jbd2/sda2-8]
 6  3492 be/4 mysql       0.00 B/s    7.66 K/s  0.00 %  0.80 % mysqld
 7  3475 be/4 mysql       0.00 B/s    3.83 K/s  0.00 %  0.52 % mysqld
 8  1539 be/4 mysql       0.00 B/s    0.00 B/s  0.00 %  0.30 % mysqld
 9  2419 be/4 mysql       0.00 B/s    3.83 K/s  0.00 %  0.24 % mysqld
10  3085 be/4 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.0-55-generic (ISeR-Server1)     08/12/2015     _x86_64_    (4 CPU)
 3
 4 12:00:01 AM     CPU     %user     %nice   %system   %iowait    %steal     %idle
 5 12:05:01 AM     all      3.83      0.02      4.24      0.61      0.00     91.30
 6 12:15:01 AM     all      3.57      0.02      4.28      0.58      0.00     91.54
 7 12:25:01 AM     all      3.83      0.02      5.16      0.60      0.00     90.39
 8 12:35:01 AM     all      3.98      0.02      5.66      0.58      0.00     89.76
 9 12:45:01 AM     all      3.86      0.02      5.26      0.59      0.00     90.28
10 12:55:01 AM     all      3.77      0.02      5.19      0.60      0.00     90.42

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

1 # sar -r
2 Linux 3.13.0-55-generic (ISeR-Server1)     08/12/2015     _x86_64_    (4 CPU)
3
4 12:00:01 AM kbmemfree kbmemused  %memused kbbuffers  kbcached  kbcommit   %commit  kbactive   kbinact   kbdirty
5 12:05:01 AM   6420736   5839392     47.63    242640   1366912   6811944     55.56   4324000   1202152        24
6 12:15:01 AM   6423128   5837000     47.61    242640   1367348   6830944     55.72   4320608   1202400        48
7 12:25:01 AM   6430984   5829144     47.55    242640   1367548   6814980     55.59   4314376   1202468        48
8 12:35:01 AM   6422924   5837204     47.61    242640   1367848   6817224     55.60   4321604   1202576        48
9 12:45:01 AM   6427300   5832828     47.58    242640   1368056   6822240     55.65   4318412   1202572        28

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

1 # sar -b
2 Linux 3.13.0-55-generic (ISeR-Server1)     08/12/2015     _x86_64_    (4 CPU)
3
4 12:00:01 AM       tps      rtps      wtps   bread/s   bwrtn/s
5 12:05:01 AM      7.44      0.00      7.44      0.00    279.22
6 12:15:01 AM      6.45      0.00      6.45      0.00    255.84
7 12:25:01 AM      6.59      0.00      6.59      0.00    260.20
8 12:35:01 AM      6.51      0.00      6.51      0.00    261.42
9 12:45:01 AM      6.42      0.00      6.42      0.00    255.79

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

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

1 # sar -s 20:00:00
2 Linux 3.13.0-55-generic (ISeR-Server1)     08/12/2015     _x86_64_    (4 CPU)
3
4 08:05:01 PM     CPU     %user     %nice   %system   %iowait    %steal     %idle
5 08:15:01 PM     all      3.98      0.02      6.07      0.58      0.00     89.34
6 08:25:01 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.0-55-generic (ISeR-Server1)     08/08/2015     _x86_64_    (4 CPU)
 3
 4 12:00:01 AM     CPU     %user     %nice   %system   %iowait    %steal     %idle
 5 12:05:01 AM     all      3.65      0.02      2.79      0.60      0.00     92.94
 6 12:15:01 AM     all      3.45      0.02      3.03      0.56      0.00     92.94
 7 12:25:01 AM     all      3.43      0.02      3.25      0.56      0.00     92.74
 8 12:35:01 AM     all      3.44      0.01      3.09      0.56      0.00     92.89
 9 12:45:01 AM     all      3.25      0.02      1.35      0.55      0.00     94.83
10 12:55:01 AM     all      3.36      0.02      1.77      0.56      0.00     94.29

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

时间: 2024-09-29 12:39:41

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

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

当磁盘无法写入的时候,一般有以下可能: 文件系统只读 磁盘已满 I节点使用完 一. 遇到只读的文件系统 文件系统自动设置成只读可能是系统自我保护的一种机制,因此需要实现弄清究竟是什么原因造成了文件系统的只读.如果想要改变文件系统的只读属性,重新挂载目标分区即可. 例1. 重新挂载改变/home分区的读写属性 # mount -o remount, rw /home -o 选项后面接了两个mount 命令的专有选项,remount是指重新挂载指定文件系统,rw指定重新挂载时的读写属性,该命令不改变

Linux系统排查——CPU负载篇

本随笔介绍CPU负载的排查手段. 查看系统负载的工具:uptime,w,都能查看系统负载,系统平均负载是处于运行或不可打扰状态的进程的平均数, 可运行:运行态,占用CPU,或就绪态,等待CPU调度. 不可打扰:阻塞,正在等待I/O 1.使用uptime查看系统负载 # uptime 19:26:17 up 49 days, 7:34, 1 user, load average: 0.67, 0.51, 0.41 这里我们关注的是最后三列,即系统1分钟.5分钟.15分钟内的平均负载,判断一个系统负

Linux系统排查1——内存篇

常见工作中,计算机系统的资源主要包括CPU,内存,硬盘以及网络,过度使用这些资源将使系统陷入困境.本系列一共四篇博文,结合我在实习期间的学习,介绍一些常见的Linux系统排障工具及方法. 第1篇——内存篇 第2篇——CPU篇 第3篇——磁盘I/O篇 第4篇——网络篇 事实上,当上述服务器系统资源中的任何一个遭遇瓶颈,都会带来服务器性能的下降,典型的症状就是系统运行迟缓. 本文从以下几个角度介绍Linux系统内存相关的排查. 1. 内存的使用率如何查看,使用率真的很高吗 2. 内存用在哪里了 3.

Linux系统排查4——网络篇

用于排查Linux系统的网络故障. 网络排查一般是有一定的思路和顺序的,其实排查的思路就是根据具体的问题逐段排除故障可能发生的地方,最终确定问题. 所以首先要问一问,网络问题是什么,是不通,还是慢? 1. 如果是网络不通,要定位具体的问题,一般是不断尝试排除不可能故障的地方,最终定位问题根源.一般需要查看 是否接入到链路 是否启用了相应的网卡 本地网络是否连接 DNS故障 能否路由到目标主机 远程端口是否开放 2. 如果是网络速度慢,一般有以下几个方式定位问题源: DNS是否是问题的源头 查看路

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

原文:http://www.cnblogs.com/Security-Darren/p/4700387.html 用于排查Linux系统的网络故障. 网络排查一般是有一定的思路和顺序的,其实排查的思路就是根据具体的问题逐段排除故障可能发生的地方,最终确定问题. 所以首先要问一问,网络问题是什么,是不通,还是慢? 1. 如果是网络不通,要定位具体的问题,一般是不断尝试排除不可能故障的地方,最终定位问题根源.一般需要查看 是否接入到链路 是否启用了相应的网卡 本地网络是否连接 DNS故障 能否路由到

linux系统下获取cpu、硬盘、内存使用率

1.linux上安装snmp服务 第一步:在公司192.168.100.171 Linux虚拟机上安装snmp服务. 第二步:通过HOST-RESOURCES-MIB库中的节点获取对应的值. 第三步:只能通过:1.3.6.1.2.1.25.1.1.0节点对象获取到系统运行时间,无法获取到其他节点的值. 第四步:修改/etc/snmp/snmpd.conf文件 添加一行:view    systemview    included   .1 第五步:修改完配置之后重启snmp服务. 2.cpu.硬

linux系统的学习经验首篇

1.linux打开terminal,两种最简单的办法,第一种,直接Ctrl+Alt+T:第二种,Alt+F2,输入gnome-terminal:更复杂的不建议使用.2.linux没有盘符的概念,只有路径,分为相对路径和绝对路径:绝对路径表示为:/路径名称,表示从根目录或者家目录开始的详细路径:相对路径表示当前目录所在的路径.3.linux系统区分大小写,terminal下ls查看,蓝颜色为文件夹,白颜色为文件,使用ls -l查看文件,左侧开头字母为D代表这些都是文件夹信息,为-则表示这些问文件内

linux系统下查看CPU、内存负载情况

$ vmstat procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu------ r b swpd free buff cache si so bi bo in cs us sy id wa st 1 4 329796 26040 4528 3379824 1 1 50 160 36 17 2 10 85 3 0 结果解释如下: procs r 列表示运行和等待cpu时间片的进程数,如果长期大于1

shell脚本监控内嵌linux系统业务、CPU、内存等

定制板卡中bash无法使用,使用标准sh完成对系统及业务监控 #! /bin/sh #Process_Name="/guard /aps /sa /zyguard" Process_Name="/mp /mcu" #获取主机IP地址 ip=`ifconfig eth0 |grep "inet addr"| cut -f 2 -d ":"|cut -f 1 -d " "` gstr="/guard&