读书笔记--Linux监控与调优(2)--性能分析工具

来源:互联网 发布:vb.net 开发手机页面 编辑:程序博客网 时间:2024/05/16 08:43

下面的三张图片[2]分别总结了 Linux 各个子系统以及监控、测试、优化这些子系统所用到的工具[Brendan]。

监控


测试


优化



1、vmstat

      vmstat是Visual Mermory Statistics(虚拟内存统计)的缩写,很多Linux发行版都默认安装了此工具。利用vmstat命令可以对操作系统的内存信息、进程状态、CPU活动等进行监视,不足之处是无法对某个进程进行深入分析。

     vmstat语法:

     vmstat [-V] [-n] [delay [count]]

     各选项及参数含义:

     -V:打印出版本信息,可选

     -n:在周期性循环输出时,输出的头部信息仅显示一次

     delay:两次输出中间的间隔时间

     count:按照“delay”指定的时间间隔统计的次数,默认1


其中,

procs

          r列表示运行和等待CPU时间片的进程数,这个值如果长期大于系统CPU的个数,说明CPU不足,需要增加CPU。

          b列表示等待资源的进程数,比如正在等待I/O或者内存交换等。

memory

          swpd列表示切换到内存交换区大小(以KB为单位)。如果swpd的值不为0,或者比较大,只要si、so的值长期为0,这种情况一般不用担心,不会影响系统性能。

          free列表示当前空闲的物理内存数量(以KB为单位)。

          buff列表示buffers cache的内存数量,一般对块设备的读写才需要缓冲。

          cache列表示page cached的内存数量,一般作为文件系统进行缓冲,频繁访问的文件都会被缓存。如果cache值较大,说明缓存的文件数较多,如果此时io中的bi比较小,说明文件系统效率比较好。

swap

          si列表示由磁盘调入内存,也就是由内存进入内存交换空间的内存大小。

          so列表示由内存调入磁盘,也就是由内存交换区进入内存的内存大小。

一般情况下,si、so的值为0,如果si、so的值长期不为0,则表示系统内存不足,需要增加系统内存。

io项表示磁盘读写情况

          bi列表示从块设备读入数据的总和(即读磁盘)(kb/s)。

          bo列表示写到块设备的数据总和(即写磁盘)(kb/s)。

这里设置的bi+bo参考值为1000,如果超过1000,而且wa值较大,则表示系统磁盘I/O有问题,应该考虑提高磁盘的读写性能。

system显示采集间隔内发生的中断数

          in列表示在某一时间间隔内观测到的每秒设备中断数。

          cs列表示每秒产生的上下文切换次数。

上面这两个值越大,由内核消耗的CPU时间越多。

cpu项显示了CPU的使用状态,此项是关注的重点。

          us列显示了用户进程消耗的CPU时间百分比。us的值比较高时,说明用户进程消耗的CPU时间多,但是如果长期大于50%,就需要考虑优化程序或算法。

          sy列显示了内核进程消耗的CPU时间百分比。sy的值较高时,说明内核消耗的CPU资源很多。

根据经验,us+sy的参考值为80%,如果us+sy大于80%,说明可能存在CPU资源不足。

          id列显示了CPU处在空闲状态的时间百分比。

          wa列显示了IO等待所占用的CPU时间百分比。wa值越高,说明I/O等待越严重。根据经验,wa的参考值为20%,如果wa超过20%,说明I/O等待严重。引起I/O等待的原因可能是磁盘大量随机读写造成的,也可能是磁盘或者磁盘控制器的带宽瓶颈(主要是块操作)造成的。

综上所述,对CPU的评估中,需要重点注意procs项中r列的值和CPU项中us、sy和id列的值。


2、sar

      sar命令很强大,是分析系统性能的重要工具之一。通过sar指令,可以全面获取系统的CPU、运行队列、磁盘I/O、分页(交换区)、内存、CPU中断、网络等性能数据。

      sar命令语法:

      sar [options] [-o filename] [interval [count] ]

       各个选项和参数:

       options,命令行选项,常用选项:

                     -A:系统所有资源设备(CPU、内存、磁盘)的运行状况。

                     -u:系统所有CPU在采样时间内的负载状态。

                     -P:当前系统中指定CPU的使用情况。

                     -d:系统所有硬盘设备在采样时间内的使用情况。

                     -r:系统内存在采样时间内的使用情况。

                     -b:缓冲区在采样时间内的使用情况。

                     -v:进程、文件、节点和锁表状态。

                     -n:网络运行状态。参数后面可跟DEV、EDEV、SOCK和FULL。DEV显示网络接口信息,EDEV显示网络错误的统计数据,SOCK显示套接字信息,FULL显示前三个参数的所有信息。它们可以单独使用或者一起使用。

                     -q:运行队列的大小,它与系统当时的平均负载相同。

                     -R:进程在采样时间内的活动情况。

                     -y:终端设备在采样时间内的活动情况。

                     -w:系统交换活动在采样时间内的状态。

                     -o filename:将命令结果以二进制格式存放在文件中,filename是文件名。

                     interval:采样间隔时间,是必须有的参数。

                     count:采样次数,可选项,默认1。


其中,

%user列显示了用户进程消耗的CPU时间百分比。

%nice列显示了运行正常进程所消耗的CPU时间百分比。

%system列显示了系统进程消耗的CPU时间百分比。

%iowait列显示了I/O等待所占用的CPU时间百分比。

%steal列显示了在内存相对紧张的环境下pagein强制对不同的页面进行的steal操作。

%idle列显示了CPU处在空闲状态的时间百分比。

这个输出是对系统整体CPU使用状况的统计,每项的输出都非常直观,并且最后一行Average是个汇总行,是上面统计信息的平均值。

需要注意的是,第一行的统计信息中包含了sar本身的统计消耗,所以%user列的值会偏高一点,不过,这不会对统计结果产生太大的影响。

在一个多CPU的系统中,如果程序使用了单线程,会出现那么一个现象,CPU的整体使用率不高,但是系统应用却响应缓慢。单线程只使用一个CPU,导致这个CPU占用率为100%,无法处理其它请求,而其它的CPU却闲置,这就导致了整体CPU使用率不高而应用缓慢现象的发生。

针对这个问题,可以分开查询系统每个CPU,统计每个CPU的使用情况-------sar -P 0 3 5


3、iostat

      iostat是I/O statistics(输入/输出统计)的缩写,主要的功能是对系统的磁盘I/O操作进行监视。它的输出主要显示磁盘读写操作的统计信息,同时给出CPU的使用情况。同vmstat一样,iostat也不能对某个进程进行深入分析,仅对系统的整体情况进行分析。(Sysstat-----iostat/sar/mpstat)

      iostat语法:

      iostat [ -c | -d ] [-k] [-t] -x [device ] ] [interval [count] ]

      各选项及参数:

      -c:CPU的使用情况。

      -d:键盘的使用情况。

      -k:每秒以KB为单位显示数据。

      -t:打印出统计信息开始执行的时间。

      -x device:指定要统计的磁盘设备名称,默认为所有的磁盘设备。

      interval:指定两次统计间隔时间。

      count:按照“interval”指定的时间间隔统计次数。


其中,

Blk_read/s:每秒读取的数据块数。

Blk_wrtn/s:每秒写入的数据酷块数。

Blk_read:读取的所有块数。

Blk_wrtn:写入的所有块数。



其中,

rrqm/s:每秒进行合并的读操作数目。

wrqm/s:每秒进行合并的写操作数目。

r/s:每秒完成读I/O设备的次数。

w/s:每秒完成写I/O设备的次数。

rsec/s:每秒读取的扇区数。

wsec/s:每秒写入的扇区数。


4、free

      free是监控Linux内存使用情况最常用的指令



      free -m表示查看以M为单位的内存使用情况,在这个输出中,重点关注的应该是free列与cached列的输出值。

      一般有这样一个经验公式:当应用程序可用内存/系统物理内存>70%时,表示系统内存资源非常充足,不影响系统性能;当应用程序可用内存/系统物理内存<20%时,表示系统内存资源紧缺,需要增加系统内存;当20%<应用程序可用内存/系统物理内存<70%时,表示系统内存资源基本能满足应用需求,暂时不影响系统性能。

      free命令还可以适时监控内存的使用状况,使用-s参数可以在指定的时间段内不间断地监控内存的使用情况。




5、uptime

      uptime主要用来统计系统当前的运行状况。输出的信息依次为:系统现在的时间,系统从上次开机到现在运行了多长时间,系统目前有多少登陆用户,系统在1分钟内、5分钟内、15分钟内的平均负载。load average的三个输出值如果长期大于系统CPU个数,则表示系统负载较高,可能影响性能。



6、netstat

      netstat命令用于显示本机网络连接、运行端口、路由表等信息。语法:

      netstat [选项]

      选项说明:

      -a:显示本机的所有连接和监听端口

      -n:以网络IP地址的形式显示当前建立的有效连接和端口

      -r:显示路由表信息

      -s:显示按协议的统计信息。默认将显示IP、IPv6、ICMP、ICMPv6、TCP、TCPv6、UDP和UDPv6的统计信息

      -v:显示当前的有效连接,与”-n“选项类似

      -t:显示所有的TCP协议连接情况

      -u:显示所有的UDP协议连接情况

      -c<描述>:后面的秒数表示每隔几秒就刷新显示一次

      -i:显示自动配置接口的状态

      -l:仅显示连接状态为”LISTEN“的服务的网络状态

      -p:显示连接对应的PID与程序名


Iface:网络设备的接口名称

MTU:最大传输单元,单位为字节

RX-OK/TX-OK:已经准确无误地接收/发送了多少数据包

RX-ERR/TX-ERR:接收/发送数据包时产生了多少错误

RX-DRP/TX-DRP:接收/发送数据包时丢失了多少数据包

RX-OVR/TX-OVR:由于误差而遗失了多少数据包

Flg:接口标记,其中:

          L:该接口是个回环设备

          B :设置了广播地址

          M:接收所有数据

          R:接口正在运行

          U:接口处于活动状态

          O:该接口上禁用arp

          P:一个点到点的连接

在正常情况下,RX-ERR/TX-ERR、RX-DRP/TX-DRP和RX-OVR/TX-OVR的值都应该为0,如果这几个选项的值不为0,并且很大,那么网络质量肯定有问题,网络传输性能也一定会下降。



7、top

      提供实时对系统处理器状态的监控,能够实时显示系统中各个进程的资源占用状况。该命令可以按照CPU的使用、内存的使用和执行时间对系统任务进程进行排序显示。同时top命令还可以通过交互式命令进行设定显示。

      top命令语法:

      top [选项]

      常用选项:

      -d:指定每两次屏幕信息刷新之间的时间间隔

      -i:不显示闲置或僵死的进程信息

      -c:显示进程的整个命令路径,而不是只显示命令名称

      -s:使top命令在安全模式下运行,此时top的交互式指令被取消,避免潜在危险

      -b:分屏显示输出信息,结合-n选项可以将屏幕信息输出到文档

      -n:top输出信息更新的次数,完成后将退出top命令

      交互式命令:

      h或?:显示帮助信息,给出交互式命令的一些总结或说明总结

      k:终止一个进程,系统将提示用户输入一个需要终止进程的PID

      i:忽略闲置进程和僵死进程,这是一个开关式命令

      s:改变top输出信息两次刷新之间的时间,系统将提示输入新的时间,单位是秒,如果是小数,就换算成毫秒。如果输入0,系统输出将不断被刷新,默认刷新时间是5秒。  需要注意的是,如果设置的时间太小,可能会引起系统不断地刷新,无法看清输出的显示情况,而且系统负载也会加大

      o或者O:改变top输出信息中显示项目的顺序。按小写的a~z键可以将相应的列向右移动,而按大写的A~Z键可以将相应的列向左移动,最后按回车键确定

      f或者F:从当前显示列表中添加或删除项目。按f键之后会显示列的列表,按a~z之间的任意键即可显示或隐藏对应的列,最后按回车键确定

      m:切换显示内存信息

      t:切换显示进程和CPU状态信息

      r:重新设置一个进程的优先级,系统提示用户输入需要改变的进程PID以及需要设置的进程优先级值。输入一个正值将使优先级降低,反之则使该进程拥有更高的优先权。默认值是10

      l:切换显示平均负载和启动时间信息

      q:退出top显示

      c:切换显示完整命令行和命令名称信息

      M:根据驻留内存大小进行排序输出

      P:根据CPU使用百分比大小进行排序输出

      T:根据时间/累计时间进行排序输出

      S:切换到累计模式

      W:将当前top设置写入~/.toprc文件中



       top的输出分为两部分:统计信息区和进程信息区,即前5行显示为统计信息区,后面几行的为进程信息区。

       (1)统计信息区

        第一行为任务队列信息,含义如下:

        :当前系统时间

        :系统已经启动了时间(天小时分钟)

        :当前登陆系统的用户数

        :系统平均负载,3个值分别表示1分钟、5分钟、15分钟前到现在的系统平均负载值

        第二、三行为进程和CPU信息,含义如下:

        :进程的总数

        :正在运行的进程数

        :处于休眠的进程数

        :停止的进程数

        :僵死的进程数

        :用户进程占用CPU的百分比

        :系统进程占用CPU的百分比

        :用户进程空间内改变过优先级的进程占用CPU的百分比

        :空闲CPU占用的百分比

        :等待输入输出的进程占用CPU的百分比

        最后两行输出的是内存信息,含义如下:

        :系统的物理内存大小

        :已使用的物理内存大小

        :目前空余内存大小

        :用作内核缓冲区的内存大小

        :交换分区的内存大小

        :已经使用的交换分区大小

        :空闲的交换分区大小

        :高速缓存的大小

        (2)进程信息区

        PID:进程的id

        USER:进程所有者的用户名

        PR:进程优先级

        NI:nice值,负值表示高优先级,正值表示低优先级

        VIRT:进程使用的虚拟内存总量,单位为KB。VIRT=SWAP+RES

        RES:进程使用的、未被换出的物理内存大小,单位为KB,RES=CODE+DATA

        SHR:共享内存大小,单位为KB

        S:进程状态,D表示不可中断的睡眠状态,R表示运行状态,S表示睡眠状态,T表示跟踪/停止,Z表示僵死进程

        %CPU:上次更新到现在的CPU时间占用百分比

        %MEM:进程占用的物理内存百分比

        TIME+:进程使用的CPU时间总计,单位为1/100秒

        COMMAND:正在运行进程的命令名或命令路径

工具

简单介绍

top

查看进程活动状态以及一些系统状况

vmstat

查看系统状态、硬件和系统信息等

iostat

查看CPU 负载,硬盘状况

sar

综合工具,查看系统状况

mpstat

查看多处理器状况

netstat

查看网络状况

iptraf

实时网络状况监测

tcpdump

抓取网络数据包,详细分析

tcptrace

数据包分析工具

netperf

网络带宽工具

dstat

综合工具,综合了 vmstat, iostat, ifstat, netstat 等多个信息


参考文献:

1、高性能Linux服务器构建实战----运维监控、性能调优与集群应用(高俊峰 著)

[2]、http://www.brendangregg.com/linuxperf.html


0 0
原创粉丝点击