本随笔介绍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资源。

使用 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

用top或者ps命令会输出PRI/PR、NI%ni/%nice这三种指标值,这些到底是什么东西?先给出大概的解释如下:

PRI :进程优先权,代表这个进程可被执行的优先级,其值越小,优先级就越高,越早被执行

NI :进程Nice值,代表这个进程的优先值

%nice :改变过优先级的进程的占用CPU的百分比 (呵呵,这句好难理解是吧,不急慢慢来^_^)

RI是比较好理解的,即进程的优先级,或者通俗点说就是程序被CPU执行的先后顺序,此值越小进程的优先级别越高。那NI呢?就是我们所要说的nice值了,其表示进程可被执行的优先级的修正数值。如前面所说,PRI值越小越快被执行,那么加入nice值后,将会使得PRI变为:PRI(new)=PRI(old)+nice。由此看出,PR是根据NICE排序的,规则是NICE越小PR越前(小,优先权更大),即其优先级会变高,则其越快被执行。如果NICE相同则进程uid是root的优先权更大。

在LINUX系统中,Nice值的范围从-20到+19(不同系统的值范围是不一样的),正值表示低优先级,负值表示高优先级,值为零则表示不会调整该进程的优先级。具有最高优先级的程序,其nice值最低,所以在LINUX系统中,值-20使得一项任务变得非常重要;与之相反,如果任务的nice为+19,则表示它是一个高尚的、无私的任务,允许所有其他任务比自己享有宝贵的CPU时间的更大使用份额,这也就是nice的名称的来意。

进程在创建时被赋予不同的优先级值,而如前面所说,nice的值是表示进程优先级值可被修正数据值,因此,每个进程都在其计划执行时被赋予一个nice值,这样系统就可以根据系统的资源以及具体进程的各类资源消耗情况,主动干预进程的优先级值。在通常情况下,子进程会继承父进程的nice值,比如在系统启动的过程中,init进程会被赋予0,其他所有进程继承了这个nice值(因为其他进程都是init的子进程)。

 

对nice值一个形象比喻,假设在一个CPU轮转中,有2个runnable的进程A和B,如果他们的nice值都为0,假设内核会给他们每人分配1k个cpu时间片。但是假设进程A的为0,但是B的值为-10,那么此时CPU可能分别给A和B分配1k和1.5k的时间片。故可以形象的理解为,nice的值影响了内核分配给进程的cpu时间片的多少,时间片越多的进程,其优先级越高,其优先级值(PRI)越低。%nice,就是改变过优先级的进程的占用CPU的百分比,如上例中就是0.5k/2.5k=1/5=20%。

 

由此可见,进程nice值和进程优先级不是一个概念,但是进程nice值会影响到进程的优先级变化。

进程的nice值是可以被修改的,修改命令分别是nice和renice。

1、nice命令就是设置一个要执行command进程的nice值,其命令格式是 nice –n adjustment command command_option,如果这里不指定adjustment,则默认为10。

2、renice命令就是设置一个已经在运行的进程的nice值,假设一运行进程本来nice值为0,renice为3后,则这个运行进程的nice值就为3了。

说明:如果用户设置的nice值超过了nice的边界值(LINUX为-20到+19),系统就取nice的边界值作为进程的nice值。

 

举例如下:

对非root用户,只能将其底下的进程的nice值变大而不能变小。若想变小,得要有相应的权限。

[oracle@perf_dbc ~]$ nice

0

[oracle@perf_dbc ~]$ nice -n 3 ls

agent bin important_bak logs statistics_import.log TMP_FORUM_STATS.dmp TMP_TAOBAO_STATS.dmp TMP_TBCAT_STATS.dmp top.dmp worksh

[oracle@perf_dbc ~]$ nice -n -3 ls

nice: cannot set priority: Permission denied

 

对root用户,可以给其子进程赋予更小的nice值。

[root@dbbak root]# nice

0

[root@dbbak root]# nice -n -3 ls

192.168.205.191.txt anaconda-ks.cfg clariion.log Desktop disk1 emc.sh File_sort install.log install.log.syslog log OPS rhel_os_soft root_link_name

 

同样,renice的执行也必须要有相应的权限方可执行。

例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资源。

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

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

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

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

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

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

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

  4. 查看Linux系统的平均负载

    1.Linux系统的平均负载的概念 有时候我们会觉得系统响应很慢,但是又找不到原因,这时就要查看平均负载了,看它是否有大量的进程在排队等待.特定时间间隔内运行队列中的平均进程数可以反映系统的繁忙程度, ...

  5. Linux系统获取CPU温度

    Linux系统获取CPU温度 摘自:https://jingyan.baidu.com/article/cbf0e500407d072eab289343.html 各位好,本篇将简单介绍如何在不同系列 ...

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

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

  7. linux里的CPU负载

    昨天查看Nagios警报信息,发现其中一台服务器CPU负载过重,机器为CentOS系统.信息如下: 2011-2-15 (星期二) 17:50 WARNING - load average: 9.73 ...

  8. 1 理解Linux系统的“平均负载”

    什么是平均负载 我们知道使用top或uptime可以用来了解系统的负载情况. uptime 2 02:34:03 up 2 days, 20:14, 1 user, load average: 0.6 ...

  9. 重新整理 .net core 实践篇 ———— linux上排查问题 [外篇]

    前言 简单介绍一下在排查问题.献给初学者. 该文的前置篇: https://www.cnblogs.com/aoximin/p/16838657.html 正文 什么是linux系统 linux 是基 ...

随机推荐

  1. 【Python】使用geopy由地址找经纬度等信息

    代码: from geopy.geocoders import Nominatim geolocator = Nominatim() location = geolocator.geocode(&qu ...

  2. SNS网站的用户流失率怎么会高得如此惊人?

    作者:黄绍麟 原51.com高管 用户典型的SNS体验 甲先生是个普通白领,白天工作使用互联网找资料连络客户,下班后回家偶而会上网闲逛.互联网是他日常接触的媒介,但是在他生命中这个东西并不显得特别重要 ...

  3. Python操作MongoDB(PyMongo模块的使用)

    #!/usr/bin/env python #coding:utf-8 # Author:   --<qingfengkuyu> # Purpose: MongoDB的使用 # Creat ...

  4. Spring MVC中Controller如何将数据返回给页面

    要实现Controller返回数据给页面,Spring MVC 提供了以下几种途径: ModelAndView:将视图和数据封装成ModelAndView对象,作为方法的返回值,数据最终会存到Http ...

  5. Aerospike系列:2:商业版和社区版的比较

    http://www.aerospike.com/products-services

  6. hdu 4336 概率dp + 状压

    hdu 4336 小吃包装袋里面有随机赠送一些有趣的卡片,如今你想收集齐 N 张卡片.每张卡片在食品包装袋里出现的概率是p[i] ( Σp[i] <= 1 ), 问你收集全部卡片所需购买的食品数 ...

  7. Struts2学习笔记四:深入拦截器

    一:拦截器的工作原理 拦截器的执行过程可以类比filter过滤器,ActionInvocation实例执行过程中,先执行action实例上引用的拦截器们,然后才执行action实例处理请求,返回res ...

  8. 这是一份很详细的 Retrofit 2.0 使用教程(含实例讲解)(转)

    前言 在Andrroid开发中,网络请求十分常用 而在Android网络请求库中,Retrofit是当下最热的一个网络请求库 今天,我将献上一份非常详细Retrofit v2.0的使用教程,希望你们会 ...

  9. [转发]如何在ASP.NET的web.config配置文件中添加MIME类型

    常常有一些特殊的MIME类型是IIS中没有的,一般来说要我们自己手动添加.如果网站经常更换服务器或者网站代码是提供给多个用户使用,那么会造成网站中用到的特殊的MIME类型要经常性的在IIS上配置.这里 ...

  10. Java获取本机IP

    try { Enumeration<NetworkInterface> interfaces = NetworkInterface.getNetworkInterfaces(); whil ...