zoukankan      html  css  js  c++  java
  • Linux 性能调优CPU篇:工具命令篇

     平均负载

    实时监控平均负载,高亮显示变化的区域

    watch -d uptime

    CPU指标篇

    CPU个数

    grep 'model name' /proc/cpuinfo | wc -l

    Sysstat

    Sysstat是一种在Linux系统服务器中常用的软件工具包,可以用来监控服务器的性能。比如可以监控CPU、硬盘、网络等数据,我们可以用来进行分析服务器的性能和资源的使用效率。

    Linux下,我们多用ssh链接服务器远程操控。对于系统的监控必不可少,sysstat很不错的监控工具包。

    • iostat: 输出CPU的统计信息和所有I/O设备的输入输出(I/O)统计信息。
    • mpstat: 关于CPU的详细信息(单独输出或者分组输出)。
    • pidstat: 关于运行中的进程/任务、CPU、内存等的统计信息。
    • sar: 保存并输出不同系统资源(CPU、内存、IO、网络、内核等。。。)的详细信息。
    • sadc: 系统活动数据收集器,用于收集sar工具的后端数据。
    • sa1: 系统收集并存储sadc数据文件的二进制数据,与sadc工具配合使用
    • sa2: 配合sar工具使用,产生每日的摘要报告。
    • sadf: 用于以不同的数据格式(CVS或者XML)来格式化sar工具的输出。
    • Sysstat: sysstat工具的man帮助页面。
    • nfsiostat: NFS(Network File System)的I/O统计信息。
    • cifsiostat: CIFS(Common Internet File System)的统计信息。

    前期准备

    Git安装方式

    mkdir /usr/local/sysstat
    yum install -y git
    git clone git://github.com/sysstat/sysstat
    cd sysstat
    ./configure --prefix=/usr/local/sysstat
    make &&make install

    配置环境变量

    1.vi /etc/profile

    #sysstat
    export PATH=/usr/local/sysstat/bin:$PATH

    2.source  /etc/profile

    3.sar -V

    sysstat version 12.5.1
    (C) Sebastien Godard (sysstat <at> orange.fr)

    这里主要介绍mpstat与pidstat工具

    mpstat

    mpstat 用于多处理器系统中的CPU的利用率的统计。细化到具体某个cpu的状态时可以使用参数-P,处理器的ID从0开始。
    mpstat --help
    选项:

    mpstat [-P {cpu|ALL}] [internal [count]]
    • -P {cpu l ALL} 表示监控哪个CPU, cpu在[0,cpu个数-1]中取值
    • internal 相邻的两次采样的间隔时间
    • count 采样的次数,count只能和delay一起使用

    使用方式

    mpstat -P ALL 3:每隔三秒打印所有cpu的数据,一直打印。
    mpstat -P 0 5:每隔五秒打印cpu0的数据,一直打印。
    mpstat -P ALL 2 5:每隔两秒打印所有cpu的数据,打印5组。

    输出说明

    %user 显示在用户级别(application)运行使用 CPU 总时间的百分比。 
    %nice 显示在用户级别,用于nice操作,所占用 CPU 总时间的百分比。
    %system 在核心级别(kernel)运行所使用 CPU 总时间的百分比。  
    %iowait 显示用于等待I/O操作占用 CPU 总时间的百分比。
    %irq 显示在interval时间段内,硬中断占用的CPU总时间。
    %soft 显示在interval时间段内,软中断占用的CPU总时间。
    %steal 管理程序(hypervisor)为另一个虚拟进程提供服务而等待虚拟CPU的百分比。
    %guest  显示运行虚拟处理器时CPU花费时间的百分比   
    %gnice      
    %idle 显示 CPU 空闲时间占用CPU总时间的百分比。

    pidstat 

    pidstat 的用法:

    pidstat [ 选项 ] [ <时间间隔> ] [ <次数> ]

    如下图:

    常用的参数:

    • -u:默认的参数,显示各个进程的cpu使用统计
    • -r:显示各个进程的内存使用统计
    • -d:显示各个进程的IO使用情况
    • -p:指定进程号
    • -w:显示每个进程的上下文切换情况
    • -t:显示选择任务的线程的统计信息外的额外信息
    • -T { TASK | CHILD | ALL }
      这个选项指定了pidstat监控的。TASK表示报告独立的task,CHILD关键字表示报告进程下所有线程统计信息。ALL表示报告独立的task和task下面的所有线程。
      注意:task和子线程的全局的统计信息和pidstat选项无关。这些统计信息不会对应到当前的统计间隔,这些统计信息只有在子线程kill或者完成的时候才会被收集。
    • -V:版本号
    • -h:在一行上显示了所有活动,这样其他程序可以容易解析。
    • -I:在SMP环境,表示任务的CPU使用率/内核数量
    • -l:显示命令名和所有参数

    示例一:查看所有进程的 CPU 使用情况( -u -p ALL)

    pidstat
    pidstat -u -p ALL

    pidstat 和 pidstat -u -p ALL 是等效的。
    pidstat 默认显示了所有进程的cpu使用率。

    详细说明

    • PID:进程ID
    • %usr:进程在用户空间占用cpu的百分比
    • %system:进程在内核空间占用cpu的百分比
    • %guest:进程在虚拟机占用cpu的百分比
    • %CPU:进程占用cpu的百分比
    • CPU:处理进程的cpu编号
    • Command:当前进程对应的命令

    示例二: cpu使用情况统计(-u)

    pidstat -u

    使用-u选项,pidstat将显示各活动进程的cpu使用统计,执行”pidstat -u”与单独执行”pidstat”的效果一样。

    pidstat -u 5:间隔五秒输出一组cpu指标,一直输出
    pidstat -u 5 5:间隔五秒输出一组cpu指标,输出5组

    示例三: 内存使用情况统计(-r)

    pidstat -r
    pidstat -r 5:间隔五秒输出一组内存指标,一直输出
    pidstat -r 5 5:间隔五秒输出一组内存指标,输出5组

    使用-r选项,pidstat将显示各活动进程的内存使用统计:

    • PID:进程标识符
    • Minflt/s:任务每秒发生的次要错误,不需要从磁盘中加载页
    • Majflt/s:任务每秒发生的主要错误,需要从磁盘中加载页
    • VSZ:虚拟地址大小,虚拟内存的使用KB
    • RSS:常驻集合大小,非交换区五里内存使用KB
    • Command:task命令名

    示例四:显示各个进程的IO使用情况(-d)

    pidstat -d

    报告IO统计显示以下信息:

    • PID:进程id
    • kB_rd/s:每秒从磁盘读取的KB
    • kB_wr/s:每秒写入磁盘KB
    • kB_ccwr/s:任务取消的写入磁盘的KB。当任务截断脏的pagecache的时候会发生。
    • COMMAND:task的命令名

    示例五:显示每个进程的上下文切换情况(-w)

    pidstat -w -p 2831
     
    • PID:进程id
    • Cswch/s:每秒主动任务上下文切换数量
    • Nvcswch/s:每秒被动任务上下文切换数量
    • Command:命令名
    自愿上下文切换,是指进程无法获取所需资源,导致的上下文切换。比如说, I/O、内存等系统资源不足时,就会发生自愿上下文切换。
    非自愿上下文切换,则是指进程由于时间片已到等原因,被系统强制调度,进而发生的上下文切换。比如说,大量进程都在争抢 CPU 时,就容易发生非自愿上下文切换。

    上下文切换和中断篇

    vmstat

    一个常用的系统性能分析工具,主要用来分析系统的内存使用情况,也常用来分析 CPU 上下文切换和中断的次数。

    示例:vmstat 5             #每隔5秒输出1组数据
    procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu----- 
    r b swpd free buff cache si so bi bo in cs us sy id wa st
    0 0 0 7005360 91564 818900 0 0 0 0 25 33 0 0 100 0 0

    cs(context switch)是每秒上下文切换的次数。

    in(interrupt)则是系统每秒中断的次数。

    r(Running or Runnable)是就绪队列的长度,也就是正在运行和等待 CPU 的进程数。

    b(Blocked)则是处于不可中断睡眠状态的进程数。

    注意:

    1、vmstat 只给出了系统总体的上下文切换情况,如果你想查看进程的上下切换次数可以使用:

    pidstat -w 5

    2、在实际中,我们经常需要查看进程的cpu指标和上下切换次数指标,可以使用:

    pidstat -w -u 1

    cat /proc/interrupts

    当使用vmstat发现系统中断次数(in)过高时,可以使用(查看具体中断类型和相关中断次数):

    watch -d cat /proc/interrupts
    • 自愿上下文切换变多了,说明进程都在等待资源,有可能发生了 I/O 等其他问题;
    • 非自愿上下文切换变多了,说明进程都在被强制调度,也就是都在争抢 CPU,说明 CPU 的确成了瓶颈;
    • 中断次数变多了,说明 CPU 被中断处理程序占用,还需要通过查看 /proc/interrupts 文件来分析具体的中断类型。

    调度优先级和调度类

    nice命令

    nice命令可以调整进程的优先级,正nice值调低优先级,而负值调高优先级,能获得更多的cpu资源,后者只能由超级用户设置,范围-20~+19。

    nice命令格式:nice [OPTION] [COMMAND [ARG]...]

    当nice没有选项时,输出值表示系统进程缺省的niceness值,一般为0。

    nice
    0

    nice命令中没有给出具体的niceness值时,默认为10。如nice vi设置vi进程的niceness为10。

    -n选项后面跟具体的niceness值。niceness值的范围-20~19,小于-20或大于19的值分别记为-20和19。

    nice -n 10 vi&

    该命令设置vi进程的niceness值为10,也就是较低的优先级。

    可以通过ps -l查看进程的niceness值。

    renice命令

    以上讨论的都是为即将运行的进程设置niceness值,而renice用于改变正在运行的进程的niceness值。

    renice,字面意思即重新设置niceness值,进程启动时默认的niceness值为0,可以用renice更新。

    renice语法:renice [优先等级][-g<程序群组名称>...][-p<程序识别码>...][-u <用户名称>...]

    renice -5 -p 5200  #将PID为5200的进程的niceness设为-5
    renice -5 -u xie   #将属于用户xie的进程的niceness设为-5
    renice -5 -g group1 #将属于group1组的程序的niceness设为5

    进程绑定

    一个进程可以绑定在一个或者多个CPU上,这样可以通过提高缓存命中率和内存本地性来提高性能。
    taskset命令可以给进程分配CPU。
    查看cpu个数
    cat /proc/cpuinfo | grep process
    设置PID为10790的进程只能跑在CPU7到CPU10之间。
    taskset -pc 7-10 10790
    设置PID为10790的进程只能跑在CPU7、CPU10上。
    taskset -pc 7,10 10790
     
  • 相关阅读:
    怎样去阅读一份php源代码
    Cloudera Hadoop 4系列实战课程(电商业日志流量分析项目)
    ORACLE系列之SQL从入门到精通(全面把控数据库基础)
    jQuery2.0应用开发:SSH框架整合jQuery2.0实战OA办公自动化
    Unity3D游戏引擎实战开发从入门到精通
    中国移动:物联网项目实战开发企业级应用(ssp框架应用、EXTJS4.2、GoogleMap、JPA)
    基于OpenLayers实战地理信息系统(离线地图,通过基站转经纬度,Quartz深入,轨迹实战)
    Android自动化测试从入门到精通
    博客从新开张啦!
    python scrapy版 极客学院爬虫V2
  • 原文地址:https://www.cnblogs.com/-wenli/p/13741329.html
Copyright © 2011-2022 走看看