美文网首页centos
linux性能分析

linux性能分析

作者: 羽非衣 | 来源:发表于2017-02-05 17:02 被阅读256次

    free

    通过读取/proc/meminfo文件中信息,显示系统中空闲物理内存总量,已使用的内存总量,swap空间,内核使用的缓存和缓冲

    使用

    格式

    free -[b|k|m]

    显示

    
    

    内存使用率(MEMUsedPerc)=100(MemTotal-MemFree-Buffers-Cached)/MemTotal*

    内存相关

    关于内存的几个常见问题:

    1. 空闲空间少
      其实linux中空闲的物理空间经常是很少的,和linux使用内存的思路有关
      linux会尽量提高内存使用率,经常会把磁盘上的内容缓存到内存,用来加速
      当内存不足时,linux就会释放缓存部分,让给真正需要的程序使用

    2. buffer 和 cache
      buffer 缓存的是磁盘文件的元数据,例如文件属性、目录结构等等
      cache 缓存的是真正的文件内容

    3. 关注要点
      MemTotal:总内存大小
      MemFree: 空闲内存大小
      Buffers和Cached:磁盘缓存的大小

    4. 如何判断内存真正不足
      内存不足主要有2个明显的表现
      (1)持续的内存换入换出
      (2)较多的主缺页中断
      主缺页中断的概念:

    缺页中断包含主/次缺页中断
    次缺页中断,是在内存中可以找到目标页
    主缺页中断,是在内存中找不到,需要到磁盘中找
    所以较多的主缺页中断意味着较多的访问磁盘

    vmstat

    vmstat显示进程,内存,分页,块IO,中断,CPU活动的信息

    虚拟内存知识

    在系统中运行的每个进程都需要使用到内存,但不是每个进程都需要每时每刻使用系统分配的内存空间。当系统运行所需内存超过实际的物理内存,内核会释放某些进程所占用但未使用的部分或所有物理内存,将这部分资料存储在磁盘上直到进程下一次调用,并将释放出的内存提供给有需要的进程使用。
    在Linux内存管理中,主要是通过“调页Paging”和“交换Swapping”来完成上述的内存调度。调页算法是将内存中最近不常使用的页面换到磁盘上,把活动页面保留在内存中供进程使用。交换技术是将整个进程,而不是部分页面,全部交换到磁盘上。
    分页(Page)写入磁盘的过程被称作Page-Out,分页(Page)从磁盘重新回到内存的过程被称作Page-In。当内核需要一个分页时,但发现此分页不在物理内存中(因为已经被Page-Out了),此时就发生了分页错误(Page Fault)。
    当系统内核发现可运行内存变少时,就会通过Page-Out来释放一部分物理内存。经管Page-Out不是经常发生,但是如果Page-out频繁不断的发生,直到当内核管理分页的时间超过运行程式的时间时,系统效能会急剧下降。这时的系统已经运行非常慢或进入暂停状态,这种状态亦被称作thrashing(颠簸)。

    使用

    参数

        vmstat 1 2    1s刷新一次,循环两次
        vmstat 2    输出两次
        -d  磁盘模式,显示磁盘
        -p dev    指定分区显示 -p后跟设备名称          
    

    使用样例

    1. vmstat
      输出:
    procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
     r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
     1  0      0 1108572   2356 1506880    0    0    92    13  148  654  3  1 95  1  0
    字段说明:
    Procs(进程):
        r: 运行队列中进程数量
        b: 等待IO的进程数量
    Memory(内存):
        swpd: 使用虚拟内存大小,如果大于0,表示你的机器物理内存不足了,如果不是程序内存泄露的原因,那么你该升级内存了或者把耗内存的任务迁移到其他机器。
        free: 可用内存大小
        buff: 用作缓冲的内存大小
        cache: 用作缓存的内存大小
    Swap:
        si: 每秒从磁盘写到虚拟内存的大小,如果这个值大于0,表示物理内存不够用或者内存泄露了,要查找耗内存进程解决掉。
        so: 每秒写入磁盘的虚拟内存大小,如果这个值大于0,表示物理内存不够用或者内存泄露了,要查找耗内存进程解决掉。
    IO:
        bi: 块设备每秒接收的块数量,这里的块设备是指系统上所有的磁盘和其他块设备,默认块大小是1024byte。
        bo: 块设备每秒发送的块数量,例如我们读取文件,bo就要大于0。bi和bo一般都要接近0,不然就是IO过于频繁,需要调整。
    系统:
        in: 每秒中断数,包括时钟中断。
        cs: 每秒上下文切换数,例如我们调用系统函数,就要进行上下文切换,线程的切换,也要进程上下文切换,这个值要越小越好,太大了,要考虑调低线程或者进程的数目,例如在apache和nginx这种web服务器中,我们一般做性能测试时会进行几千并发甚至几万并发的测试,选择web服务器的进程可以由进程或者线程的峰值一直下调,压测,直到cs到一个比较小的值,这个进程和线程数就是比较合适的值了。系统调用也是,每次调用系统函数,我们的代码就会进入内核空间,导致上下文切换,这个是很耗资源,也要尽量避免频繁调用系统函数。上下文切换次数过多表示你的CPU大部分浪费在上下文切换,导致CPU干正经事的时间少了,CPU没有充分利用,是不可取的。
    CPU(以百分比表示):
        us: 用户进程执行时间,us的值比较高时,说明用户进程消耗的CPU时间多,如果长期大于50%,需要考虑优化程序。
        sy: 系统进程执行时间,sy的值比较高时,就说明内核消耗的CPU时间多;如果us+sy超过80%,就说明CPU的资源存在不足。
        id: 空闲时间(包括IO等待时间)
        wa: 等待IO时间,wa值越高,说明IO等待越严重。如果wa值超过20%,说明IO等待严重。
    

    需要关注指标:

    • r 运行的进程比较多,系统繁忙
    • bo 磁盘写的数据量大
    • us 持续大于50,服务器高峰可以接受
    • wa IO等待,持续大于30,说明IO等待严重
    • id 持续小于50,服务器高峰可以接受
    1. vmstat -d
      输出:
    disk- ------------reads------------ ------------writes----------- -----IO------
           total merged sectors      ms  total merged sectors      ms    cur    sec
    sda    39921   4296 2489785  868514  21660   1994  523688 2201496      0    383
    sr0        0      0       0       0      0      0       0       0      0      0
    dm-0   28600      0 2030513  696826   4843      0  110008 2207246      0    244
    dm-1     271      0    2168    2171      0      0       0       0      0      1
    loop0      0      0       0       0      0      0       0       0      0      0
    loop1      0      0       0       0      0      0       0       0      0      0
    loop2      0      0       0       0      0      0       0       0      0      0
    dm-2   10615      0  442345  203700  17397      0  409528  649147      0    167
    

    字段说明:

     1. reads:
        total,读取总量
        metged,合并后分组的读
        sectors,成功读取的扇区
        ms,读取所花费的时间(ms)
     2. writes 写入
     3. IO
        cur 正在进行的IO
        sec IO花费的秒数
    
    1. vmstat -m(SLAB)
      输出:
    Cache                             Num  Total   Size  Pages
    nf_conntrack_ffff8800c0996300      0      0    312     26
    nf_conntrack_ffff8800b6ae0000      0      0    312     26
    fuse_inode                         21     21    768     21
    nf_conntrack_ffff8800c0990000      0      0    312     26
    nf_conntrack_ffffffff819a09c0      546    546    312     26
    kvm_vcpu                           0      0  16064      2
    
    1. vmstat -s
      显示各种事件计数器和内存统计信息

    常见问题分析

    CPU问题现象:

    1. 如果在processes中运行的序列(process r)是连续的大于在系统中的CPU的个数表示系统现在运行比较慢,有多数的进程等待CPU.
    2. 如果r的输出数大于系统中可用CPU个数的4倍的话,则系统面临着CPU短缺的问题,或者是CPU的速率过低,系统中有多数的进程在等待CPU,造成系统中进程运行过慢.
    3. 如果空闲时间(cpu id)持续为0并且系统时间(cpu sy)是用户时间的两倍(cpu us) 系统则面临着CPU资源的短缺.

    解决办法:

    当发生以上问题的时候请先调整应用程序对CPU的占用情况.使得应用程序能够更有效的使用CPU.同时可以考虑增加更多的CPU. 关于CPU的使用情况还可以结合mpstat/ps aux/ top /prstat –a等等一些相应的命令来综合考虑关于具体的CPU的使用情况,和那些进程在占用大量的CPU时间.一般情况下,应用程序的问题会比较大一些.比如一些SQL语句不合理等等都会造成这样的现象.

    内存问题现象:

    内存的瓶颈是由scan rate (sr)来决定的.scan rate是通过每秒的始终算法来进行页扫描的.如果scan rate(sr)连续的大于每秒200页则表示可能存在内存缺陷.同样的如果page项中的pi和po这两栏表示每秒页面的调入的页数和每秒调出的页数.如果该值经常为非零值,也有可能存在内存的瓶颈,当然,如果个别的时候不为0的话,属于正常的页面调度这个是虚拟内存的主要原理.

    解决办法:

    1. 调节应用或者服务使得对内存和cache的使用更加有效.
    2. 增加系统的内存.
    3. 关于内存的使用情况还可以结ps aux top prstat –a等等一些相应的命令来综合考虑关于具体的内存的使用情况,和那些进程在占用大量的内存.一般情况下,如果内存的占用率比较高,但是,CPU的占用很低的时候,可以考虑是有很多的应用程序占用了内存没有释放,但是,并没有占用CPU时间,可以考虑应用程序,对于未占用CPU时间和一些后台的程序,释放内存的占用.

    相关文章

      网友评论

        本文标题:linux性能分析

        本文链接:https://www.haomeiwen.com/subject/dxueittx.html