发布新日志

  • linux查看系统性能的命令

    2010-05-14 22:12:33

    一、vmstat

    procs -----------memory---------- ---swap-- -----io---- --system-- ----cpu----
    r b swpd free buff cache si so bi bo in cs us sy id wa
    0 0 195804 3812 40616 1598656 0 0 0 0 1024 66976 0 0 100 0
    0 0 195804 3812 40616 1598656 0 0 0 12 1048 66961 0 0 100 0
    0 0 195804 3812 40616 1598656 0 0 0 28 1054 67067 0 0 100 0
    0 0 195804 3812 40616 1598656 0 0 0 0 1020 66988 0 0 100 0

    (注:目前系统几乎空闲,并且不同操作系统VMSTAT输出内容有所不同)

    r(运行队列):
    展示了正在执行和等待CPU资源的任务个数。当这个值超过了CPU数目,就会出现CPU瓶颈了

    获得CPU个数的命令(Linux环境):
    cat /proc/cpuinfo|grep processor|wc -l

    当r值超过了CPU个数,就会出现CPU瓶颈,解决办法大体几种:
    1. 最简单的就是增加CPU个数
    2. 通过调整任务执行时间,如大任务放到系统不繁忙的情况下进行执行,进尔平衡系统任务
    3. 调整已有任务的优先级
    (如果r经常大于4 ,且id经常少于40,表示cpu的负荷很重。) 

    通过VMSTAT识别CPU满负荷
    首先需要声明一点的是,vmstat中CPU的度量是百分比的。当us+sy的值接近100的时候,表示CPU正在接近满负荷工作。但要注意的是,CPU 满负荷工作并不能说明什么,UNIX总是试图要CPU尽可能的繁忙,使得任务的吞吐量最大化。唯一能够确定CPU瓶颈的还是r(运行队列)的值。

    procs: 
    r-->在运行队列中等待的进程数 
    b-->在等待io的进程数 
    w-->可以进入运行队列但被替换的进程 
    memoy 
    swap-->现时可用的交换内存(k表示) 
    free-->空闲的内存(k表示) 
    cpu 表示cpu的使用状态 
    cs--》用户进程使用的时间 
    sy--》系统进程使用的时间 
    id--》cpu空闲的时间 

    如果pi,po 长期不等于0,表示内存不足。 
    如果disk 经常不等于0, 且在 b中的队列 大于3, 表示 io性能不好。

    2、iostat

    在命令行收集有关CPU、磁盘、终端和磁带输入/输出操作的数据
    #iostat -x 60 10 在60秒内产生10个统计报告,输出

    1. # iostat -x
    2.                   extended device statistics
    3. device       r/s    w/s   kr/s   kw/s wait actv  svc_t  %w  %b
    4. fd0          0.0    0.0    0.0    0.0  0.0  0.0    0.0   0   0
    5. md20         0.0    0.0    0.0    0.0  0.0  0.0    0.0   0   0
    6. md21         0.0    0.0    0.0    0.0  0.0  0.0    0.0   0   0
    7. md22         0.0    0.0    0.0    0.0  0.0  0.0    0.0   0   0
    8. md25         0.0    0.0    0.0    0.0  0.0  0.0    0.0   0   0
    9. md50         0.0    0.0    0.0    0.0  0.0  0.0    0.0   0   0
    10. md51         0.0    0.0    0.0    0.0  0.0  0.0    0.0   0   0
    11. sd0         17.0    1.9  185.9    3.5  0.0  0.3   18.5   0  12
    12. sd1          0.4    0.2    0.2    0.2  0.0  0.0    2.7   0   0
    13. sd6          0.0    0.0    0.0    0.0  0.0  0.0    0.0   0   0
    14. nfs1         0.0    0.0    0.0    0.0  0.0  0.0    0.0   0   0
    复制代码
    device显示设备名  
    r/s显示每秒读磁盘操作的次数
    w/s 显示每秒写磁盘操作的次数 
    kr/s 显示每秒读数据总量  单位K  
    kw/s 显示每秒写数据总量  单位K 
    wait 显示平均的等待事务数量 
    actv  显示正在处理的平均事务总量 
    svc_t 显示凭据服务周期 单位 ms 
    %w 显示等待时间的百分数
    %b 显示磁盘工作时间的百分数


    三、free

    Linux下查看内存我们一般用command free
    [root@nonamelinux ~]# free
    total used free shared buffers cached
    Mem: 386024 377116 8908 0 21280 155468
    -/+ buffers/cache: 200368 185656
    Swap: 393552 0 393552
    下面是对这些数值的解释:
    第二行(mem):
    total:总计物理内存的大小。
    used:已使用多大。
    free:可用有多少。
    Shared:多个进程共享的内存总额。
    Buffers/cached:磁盘缓存的大小。
    第三行(-/+ buffers/cached):
    used:已使用多大。
    free:可用有多少。
    第四行就不多解释了。
    区别:
    第二行(mem)的used/free与第三行(-/+ buffers/cache) used/free的区别。
    这 两个的区别在于使用的角度来看,第一行是从OS的角度来看,因为对于OS,buffers/cached 都是属于被使用,所以他的可用内存是8908KB,已用内存是377116KB,其中包括,内核(OS)使用+Application(X, oracle,etc)使用的+buffers+cached.
    第三行所指的是从应用程序角度来看,对于应用程序来说,buffers/cached 是等于可用的,因为buffer/cached是为了提高文件读取的性能,当应用程序需在用到内存的时候,buffer/cached会很快地被回收。
    所以从应用程序的角度来说,可用内存=系统free memory+buffers+cached.
    如上例:
    185656=8908+21280+155468
    接下来解释什么时候内存会被交换,以及按什么方交换。
    当可用内存少于额定值的时候,就会开会进行交换.
    如何看额定值(RHEL4.0):
    #cat /proc/meminfo
    交换将通过三个途径来减少系统中使用的物理页面的个数: 
    1.减少缓冲与页面cache的大小,
    2.将系统V类型的内存页面交换出去, 
    3.换出或者丢弃页面。(Application 占用的内存页,也就是物理内存不足)。
    事实上,少量地使用swap是不是影响到系统性能的。

    下面是buffers与cached的区别。
    buffers是指用来给块设备做的缓冲大小,他只记录文件系统的metadata以及 tracking in-flight pages.
    cached是用来给文件做缓冲。
    那就是说:buffers是用来存储,目录里面有什么内容,权限等等。
    而cached直接用来记忆我们打开的文件,如果你想知道他是不是真的生效,你可以试一下,先后执行两次命令#man X ,你就可以明显的感觉到第二次的开打的速度快很多。
    实验:在一台没有什么应用的机器上做会看得比较明显。记得实验只能做一次,如果想多做请换一个文件名。
    #free
    #man X
    #free
    #man X
    #free
    你可以先后比较一下free后显示buffers的大小。
    另一个实验:
    #free
    #ls /dev
    #free
    你比较一下两个的大小,当然这个buffers随时都在增加,但你有ls过的话,增加的速度会变得快,这个就是buffers/chached的区别。 

    因为Linux将你暂时不使用的内存作为文件和数据缓存,以提高系统性能,当你需要这些内存时,系统会自动释放(不像windows那样,即使你有很多空闲内存,他也要访问一下磁盘中的pagefiles)   
    使用free命令   
    将used的值减去   buffer和cache的值就是你当前真实内存使用

    四、mpstat


    五、uptime

    ptime是Linux系统常用的命令,用来报告系统已经运行多长时间,依此显示的信息:现在时间,系统已经运行了的时间,目前有多少登陆用户, 1分钟系统平均负载,5分钟系统平均负载,15分钟系统平均负载。该命令从/proc/loadavg 中获得load average的信息。

    范例1:系统只用一个CPU

    [root@localhost ~]# uptime

    12:20:49 up 3 days,9:20, 5 users, load average 1.10 1.32 1.15

    对于一个CPU的系统来说,范例1中的平均负载高了些。通常来说:如果系统有n个CPU而且平均负载小于n,则说明某些CPU还有空闲的时间片。通过该命令,你能知道CPU是否繁忙,但是无法知道为什么忙。

Open Toolbar