zoukankan      html  css  js  c++  java
  • [zz]Linux系统性能监控工具

    CPU利用率:

    Linux以及大多数基于UNIX的操作系统都提供了一条命令来显示系统的平均负载(load average):

    clip_image002

    具体的讲,平均负载代表了在1min,5min和15min内可以运行的任务平均数。可运行的任务包括当前正在运行的任务以及虽然可以运行但正在等待某个处理器空闲的任务。我这里只有一个CPU,且0.31,0.46,0.21均小于1.00,这表明处理器仍拥有额外的空闲周期。同理如果有两个CPU,且load average均小于2.00的话,这同样表明处理器拥有额外的空闲周期。然后负载平均值单独并不能说明所有问题。

    为了更深入地探究处理器的使用情况,下面介绍几种工具可以提供许多关于CPU利用的不同理解:

    1) vmstat

    一个实时性能监视工具。该工具提供了有助于发现系统异常活动的数据。

    clip_image004

    上面的命令是每1s输出vmstat的信息,共10次,具体说明如下:

    Procs:提供了在生成报告时正在运行的进程数目(r)以及被阻塞的进程数目(b)

    Memory: 提供了换出内存(swpd),空闲内存(free),IO数据结构的缓存区缓存(buff)以及从磁盘读取文件的内存缓存(cache)的容量。单位为KB.

    Swap:提供了从磁盘上换入内存容量(si)以及换出到磁盘上的内存量(so),单位为KB/s.so反应了当数据被换出至交换区时kswapd的情况,而si则反映了当页面被换回到物理内存时发生页面错误的情况。

    io:提供了从设备读入的块数(bi)以及写出到设备上的块数(bo),单位为KB/s。

    System: 提供了每秒的中断数目(in)和上下文切换数目(cs).

    Cpu:提供了用户(us),系统(sy),真正空闲(id)以及等待I/O完成(wa)在cpu总时间中所占的百分比。

    2) top与gtop

    它可以显示哪些进程是活跃的以及哪些进程消耗的处理时间或内存最多。top命令对于所有正在运行的进程和系统负载提供不断更新的概览信息。包括cpu负载,内存使用以及每个进程的内存使用情况。

    clip_image006

    默认情况下,top输出经常刷新,且把任务基于CPU占用时间的百分比排序。对图详细解释如下:

    第一行:显示正常运行的时间,包括当前时间,系统上次重启后已运行的时间和当前用户数量以及3个用于表示在先前1min,5min,15min内准备运行的平均处理器数目的平均负荷值。

    第二行:给出进程的统计信息。包括正在运行的进程总数。具体还有正在运行的,睡眠的,僵尸的和已停止进程的数目。

    第三和四行:显示各个的统计信息。包括用户进程,系统进程,niced进程(优先进程)以及空闲进程所占用的cpu的时间比。

    第五行提供内存统计信息。包括内存总量,已用内存,空闲内存,不同进程共享的内存以及缓存内存。

    第六行显示虚存或交换活动的统计信息,包括交换空间总量,已经使用的,空闲的和缓存空间大小。

    具体到统计信息的每一行,看下边:

    PID: 每个进程的ID;

    USER: 每个进程所有者的用户名;

    PR: 每个进程的优先级别;

    NI: 该进程的优先级值;

    VIRT: 虚拟内存;

    RES: 常驻内存;

    SHR: 共享内存;

    %CPU: 该进程自最近一次刷新以来所占用的CPU时间和总时间的百分比;

    %MEM: 内存使用率,该进程占用的物理内存占总内存的百分比;

    TIME: 该进程自启动以来所占用的总CPU时间。如果进入的是累计模式,那么该时间还包括这个进程子进程所占用的时间。且标题会变成CTIME;

    COMMAND: 该进程的命令名称,如果一行显示不下,则会进行截取。内存中的进程会有一个完整的命令行.

    3)sar

    它收集包括CPU利用率,上下文切换和中断速率,页换入和页换出速率,共享内存的使用情况,缓冲区使用情况以及网络使用情况。它常常用于确定事件的时间,也可用于标识特定的系统行为变化。Sar可以使用更短的时间间隔或固定数目的时间间隔来输出信息,sar可以为所收集的许多数据点提供平均信息。sar命令的选项很多,下面只列出常用选项:

    -A:所有报告的总和。

    -u:CPU利用率

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

    -d:硬盘使用报告。

    -r:没有使用的内存页面和硬盘块。

    -g:串口I/O的情况。

    -b:缓冲区使用情况。

    -a:文件读写情况。

    -c:系统调用情况。

    -R:进程的活动情况。

    -y:终端设备活动情况。

    -w:系统交换活动。

    clip_image008

    以上每2秒采样一次,连续采样5次,观察CPU 的使用情况,并将采样结果以二进制形式存入当前目录下的文件zhou中。如果要查看二进制文件zhou中的内容,则需键入如下sar命令:
    # sar -u -f zhou
    可见,sar命令即能实时采样,又能对以往的采样结果进行查询。

    在显示内容包括:
    CPU all 表示统计信息为所有 CPU 的平均值。
    %user 显示在用户级别(application)运行使用 CPU 总时间的百分比。
    %nice 显示在用户级别,用于nice操作,所占用 CPU 总时间的百分比。
    %system 在核心级别(kernel)运行所使用 CPU 总时间的百分比。
    %iowait 显示用于等待I/O操作占用 CPU 总时间的百分比。
    %steal 管理程序(hypervisor)为另一个虚拟进程提供服务而等待虚拟 CPU 的百分比。
    %idle 显示 CPU 空闲时间占用 CPU 总时间的百分比。

    内存利用率:

    1)/proc/meminfo与/proc/slabinfo

    这两个文件可以捕获物理内存的状况。要理解内核内存使用的情况,可以查看/proc/slabinfo文件。

    clip_image009

    MemTotal: 所有可用RAM大小(即物理内存减去一些预留位和内核的二进制代码大小)
    MemFree: LowFree与HighFree的总和,被系统留着未使用的内存
    Buffers: 用来给文件做缓冲大小
    Cached: 被高速缓冲存储器(cache memory)用的内存的大小(等于diskcache minus SwapCache)
    SwapCached:被高速缓冲存储器(cache memory)用的交换空间的大小
    已经被交换出来的内存,但仍然被存放在swapfile中。用来在需要的时候很快的被替换

    而不需要再次打开I/O端口。
    Active: 在活跃使用中的缓冲或高速缓冲存储器页面文件的大小,除非非常必要否则不会被移作他用.
    Inactive: 在不经常使用中的缓冲或高速缓冲存储器页面文件的大小,可能被用于其他途径.
    HighTotal:
    HighFree: 该区域不是直接映射到内核空间。内核必须使用不同的手法使用该段内存。
    LowTotal:
    LowFree: 低位可以达到高位内存一样的作用,而且它还能够被内核用来记录一些自己的数据结构。

    SwapTotal: 交换空间的总大小
    SwapFree: 未被使用交换空间的大小
    Dirty: 等待被写回到磁盘的内存大小。
    Writeback: 正在被写回到磁盘的内存大小。
    AnonPages:未映射页的内存大小
    Mapped: 设备和文件等映射的大小。

    Slab: 内核数据结构缓存的大小,可以减少申请和释放内存带来的消耗。
    SReclaimable:可收回Slab的大小
    SUnreclaim:不可收回Slab的大小(SUnreclaim+SReclaimable=Slab)
    PageTables:管理内存分页页面的索引表的大小。
    NFS_Unstable:不稳定页表的大小
    VmallocTotal: 可以vmalloc虚拟内存大小
    VmallocUsed: 已经被使用的虚拟内存大小。

    clip_image010

    这是其中的部分截图:

    第一列:内核数据结构的名称。

    第二列:活跃的

    第三列:总数

    第四列:每个数据结构占用大小

    第五列:至少拥有一个活动对象的页面数

    第六列:已经分配页面的总数

    第七列:每个slab结构所分配的页面数

    2)ps

    获取特定进程中的内存使用情况.ps 的参数非常多, 在此仅列出几个常用的参数并大略介绍含义
    -A 列出所有的行程
    -w 显示加宽可以显示较多的资讯
    -au 显示较详细的资讯
    -aux 显示所有包含其他使用者的行程

    clip_image012

    说明:

    USER: 行程拥有者
    PID: pid 
    %CPU: 占用的 CPU 使用率
    %MEM: 占用的记忆体使用率
    VSZ: 占用的虚拟记忆体大小
    RSS: 占用的记忆体大小
    TTY: 终端的次要装置号码 (minor device number of tty) 
    STAT: 该行程的状态: 
    D: 不可中断的静止 R:正在执行中  S: 静止状态  T:暂停执行  Z:不存在但暂时无法消除
    W: 没有足够的记忆体分页可分配 <: 高优先序的行程 N: 低优先序的行程
    L: 有记忆体分页分配并锁在记忆体内(即时系统或捱A I/O) 
    START: 行程开始时间
    TIME: 执行的时间
    COMMAND:所执行的指令

    当标识出需要关注的进程后,可以查看这些进程的虚拟地址布局,从而获知进程当前使用内存的具体分配情况。/proc/pid/maps包含了进程地址空间的所有映射及其大小。

    clip_image014

    从左到右依次是:

    被分配的地址范围;虚拟内存的许可权限;虚拟内存区域在被映射文件中的偏移量;映像文件的主设备号和次设备号;设备的节点号,0表示没有节点与内存相对应;被映射文件的文件名

    3)vmstat

    主要目的是监视内存可用性和交换活动,还提供io活动的概况。

    IO利用率

    1) iostat监视系统IO活动,检查物理磁盘就平均传输率而言处于活动状态之中的时间长度。iostat 命令生成四种类型的报告,tty 和 CPU 使用率报告、磁盘使用率报告、系统吞吐量报告和适配器吞吐量报告。

    clip_image015

    · tps        发至逻辑磁盘的IO请求数

    · Blk_read/s      每秒读入块数

    · Blk_wrtn/s      每秒写入块数

    · Blk_read        读取总块数

    · Blk_wrtn        写入总块数

    2) sar(略)

    网络利用率

    1) netstat

    用于显示与IP、TCP、UDP和ICMP协议相关的统计数据,一般用于检验本机各端口的网络连接情况。常用选项:

    –s:本选项能够按照各个协议分别显示其统计数据。如果我们的应用程序(如Web浏览器)运行速度比较慢,或者不能显示Web页之类的数据,那么我们就可以用本选项来查看一下所显示的信息。我们需要仔细查看统计数据的各行,找到出错的关键字,进而确定问题所在。

    –e:本选项用于显示关于以太网的统计数据。它列出的项目包括传送的数据报的总字节数、错误数、删除数、数据报的数量和广播的数量。这些统计数据既有发送的数据报数量,也有接收的数据报数量。这个选项可以用来统计一些基本的网络流量)。

    –r:本选项可以显示关于路由表的信息,类似于后面所讲使用route print命令时看到的 信息。除了显示有效路由外,还显示当前有效的连接。

    –a:本选项显示一个所有的有效连接信息列表,包括已建立的连接(ESTABLISHED),也包括监听连接请求(LISTENING)的那些连接。

    –n:显示所有已建立的有效连接

    clip_image017

    netstat –i

    clip_image019

    从做到右依次是接口名,MTU以及接收和发送报文中传输成功的通过某种方式出错的,丢弃的或溢出的报文数。

    netstat –s

    clip_image021

    netstat工具显示了存在于内核中的大多数计数器,但并未涵盖全部计数器。要查看计数器的完整列表,可以浏览/proc/net/snmp和/proc/net/netstat文件的内容。

    About URL:http://www.cnblogs.com/hanyan225/archive/2011/04/05/2005934.html

    linux常用系统性能监控工具之高级命令:http://blogold.chinaunix.net/u2/86974/showart_2040064.html

    About URL:http://www.lupaworld.com/forum.php?mod=viewthread&tid=65263

    Linux中提供了一个非常好的文件虚拟系统(/proc)来对系统性能进行监控。

    /proc文件虚拟系统是一种内核和内核模块用来向进程发送信息的机制。它存在于内存而不是硬盘中。

    /proc文件虚拟系统的主要功能,可以监控到包括进程信息、系统信息、CPU信息、负载信息、系统内存信息等等。


    1、监测系统负载
            
    使用uptime命令可以查看系统负载,系统平均负载是指在特定时间间隔内运行队列中的平均进程数目。如果一个进程没有在等待I/O操作的结果并主动进入等待状态,则其位于运行队列之中。
    # uptime
    15:44:50 up 5:45,  4 users,  load average: 2.11, 0.66, 0.26
           以上从显示最近1分钟内系统的平均负载是2.11,在最近5分钟内系统的平均负载为0.66,在最近的15分钟内系统的平均负载为0.26,一共有4个用户。假设,系统只有一个CPU,表示当前的任务数为2.11个;若系统有两个CPU,则表示当前的任务数为2.11/2=1.055个,表明此系统的性能还是很好的。

    2、监测进程运行      

    Linux系统提供了ps和top命令来监测进程运行的情况,根据监测的情况,再进行一些相应的措施来提高系统的性能。例如,通过ps–ef|more命令来查看哪些进程在运行及运行状态。如进程是否结束、是否有僵死的进程,以及哪些进程占用了过多的资源等。
    3、监测内存使用情况        

    系统在运行中,由于物理内存经常会不够用,所以,需要通过虚拟内存来解决这个问题。虚拟内存通过在各个进程之间共享内在而使系统看起来有多于实际内存的内存容量。Linux系统支持虚拟内存即使用磁盘作为RAM的扩展,使可用内存扩大。

    (1)、实时监控内存使用情况
    在Linux系统中,一般用free命令来监控内存的使用情况                                

    (2)、监视虚拟内存使用情况                                

    用vmstat命令可以监测系统的虚拟内存、进程及CPU的活动情况。
    # vmstat 3 3

    4、监测CPU使用情况

            在Linux系统中,用于监测CPU使用情况的工具有top和mpstat。

    5、监测I/O性能                                      
      在Liinux系统中,可以用iostat命令来监测磁盘的I/O的性能。但是,iostat命令只能分析的整体情况。        
    查看/dev/hdb6分区的I/O详细情况。
    # iostat -x /dev/hdb6

    6、6款系统监控工具
            1.htop—— http://htop.sourceforge.net/
    一个可以让用户与之交互的进程查看器。作为文本模式的应用程序,主要用于控制台或 X 终端中。当前具有按树状方式来查看进程,支持颜色主题,可以定制等特性。

    2.dstat——http://dag.wieers.com/home-made/dstat/
    一个用来替换vmstat, iostat, netstat, nfsstat 和ifstat 这些命令的工具,是一个全能系统信息统计工具。

    3.BMon——http://freshmeat.net/projects/bmon/
    一个易于使用的软件,该软件可以帮助您监测蓝牙设备。

    4.Iftop——http://www.ex-parrot.com/pdw/iftop/
    主要用来显示本机网络流量情况及各相互通信的流量集合,如单独同那台机器间的流量大小,非常适合于代理服务器和iptables服务器使用


    5.ifstat——http://gael.roualland.free.fr/ifstat/
    一个非常不错的检测网络活动状态的软件


    6.Sysstat——http://pagesperso-orange.fr/sebastien.godard/
    包含监测系统性能及效率的一组工具,这些工具对于我们收集系统性能数据,比如CPU使用率、硬盘和网络吞吐数据,这些数据的收集和分析,有利于我们判断系统是否正常运行,是提高系统运行效率、安全运行服务器的得力助手。

  • 相关阅读:
    Sharding-JDBC多数据源动态切换
    U 盘安装 CentOS 7 时出现 No Caching mode page found 问题的解决
    sudo 密码直接添加到命令行以方便实现脚本自动化
    Python3 Windows 虚拟环境的若干问题
    20 张图让你彻底弄懂 HTTPS 原理!
    全网写得最好的分库分表之 Sharding-JDBC 中间件介绍
    以为线程池很简单,结果第一道题就被干趴下了!
    以为线程池很简单,没想到第一问就被干趴下了
    分布式事务,看这篇就够了!
    我是一个线程池
  • 原文地址:https://www.cnblogs.com/zhangzhang/p/2375787.html
Copyright © 2011-2022 走看看