zoukankan      html  css  js  c++  java
  • [转载学习]Linux性能监控

    Linux系统性能监控工具,本文转自:http://www.cnblogs.com/hanyan225/archive/2011/04/05/2005934.html

    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文件的内容。

    赠人玫瑰
    手留余香

    我们曾如此渴望命运的波澜,到最后才发现:人生最曼妙的风景,竟是内心的淡定与从容……我们曾如此期盼外界的认可,到最后才知道:世界是自己的,与他人毫无关系!-杨绛先生

    如果,您认为阅读这篇博客让您有些收获,不妨点击一下右下角的推荐按钮。
    如果,您希望更容易地发现我的新博客,不妨点击一下绿色通道的关注我

  • 相关阅读:
    GIT学习实践笔记
    ubuntu 安装pygit2
    强化vim打造python的IDE
    Python Django学习和实践
    浏览器调试工具网页性能分析中的使用
    公司发版shell脚本重构
    Nightwatch+gulp
    Git
    JavaScript Unit Test with Qunit
    Unit Test Mocking Framework
  • 原文地址:https://www.cnblogs.com/haochuang/p/2305216.html
Copyright © 2011-2022 走看看