zoukankan      html  css  js  c++  java
  • linux命令监控服务器性能

    1、vmstat 1

    $ vmstat 1

    procs ---------memory---------- ---swap-- -----io---- -system-- ------cpu-----

     r  b swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st

    34  0    0 200889792  73708 591828    0    0     0     5    6   10 96  1  3  0  0

    32  0    0 200889920  73708 591860    0    0     0   592 13284 4282 98  1  1  0  0

    32  0    0 200890112  73708 591860    0    0     0     0 9501 2154 99  1  0  0  0

    32  0    0 200889568  73712 591856    0    0     0    48 11900 2459 99  0  0  0  0

    32  0    0 200890208  73712 591860    0    0     0     0 15898 4840 98  1  1  0  0

       

    vmstat命令,每行会输出一些系统核心指标,这些指标可以让我们更详细的了解系统状态。后面跟的参数1,表示每秒输出一次统计信息,表头提示了每一列的含义,这几介绍一些和性能调优相关的列:

    r 等待在CPU资源的进程数。这个数据比平均负载更加能够体现CPU负载情况,数据中不包含等待IO的进程。如果这个数值大于机器CPU核数,那么机器的 CPU资源已经饱和。 

    free系统可用内存数(以千字节为单位),如果剩余内存不足,也会导致系统性能问题。下文介绍到的free命令,可以更详细的了解系统内存的使用情 况。

    si, so交换区写入和读取的数量。如果这个数据不为0,说明系统已经在使用交换区(swap),机器物理内存已经不足。

    us, sy, id, wa, st这些都代表了CPU时间的消耗,它们分别表示用户时间(user)、系统(内核)时间(sys)、空闲时间(idle)、IO等待时间(wait) 和被偷走的时间(stolen,一般被其他虚拟机消耗)。

    上述这些CPU时间,可以让我们很快了解CPU是否出于繁忙状态。一般情况下,如果用户时间和系统时间相加非常大,CPU出于忙于执行指令。如果IO等待时间很长,那么系统的瓶颈可能在磁盘IO。

    示例命令的输出可以看见,大量CPU时间消耗在用户态,也就是用户应用程序消耗了CPU时间。这不一定是性能问题,需要结合r队列,一起分析。

     

    procs 
    r (Load Arerage)列表示运行和等待cpu时间片的进程数,如果长期大于1,说明cpu不足,需要增加cpu。 
    b 列表示在等待资源的进程数,比如正在等待I/O、或者内存交换等。

    memory 
    swpd 切换到内存交换区的内存数量(k表示)。如果swpd的值不为0,或者比较大,比如超过了100m,只要si、so的值长期为0,系统性能还是正常 
    free 当前的空闲页面列表中内存数量(k表示) 
    buff 作为buffer cache的内存数量,一般对块设备的读写才需要缓冲。 
    cache: 作为page cache的内存数量,一般作为文件系统的cache,如果cache较大,说明用到cache的文件较多,如果此时IO中bi比较小,说明文件系统效率比较好。

    swap 
    si 由内存进入内存交换区数量。 
    so由内存交换区进入内存数量。

    IO 
    bi 从块设备读入数据的总量(读磁盘)(每秒kb)。 
    bo 块设备写入数据的总量(写磁盘)(每秒kb) 
    这里我们设置的bi+bo参考值为1000,如果超过1000,而且wa值较大应该考虑均衡磁盘负载,可以结合iostat输出来分析。

    System

    显示采集间隔内发生的中断数 
    in (Interrupt)列表示在某一时间间隔中观测到的每秒设备中断数。 
    cs(Context Switch)列表示每秒产生的上下文切换次数,如当 cs 比磁盘 I/O 和网络信息包速率高得多,都应进行进一步调查。

    cpu

    表示cpu的使用状态 
    us 列显示了用户方式下所花费 CPU 时间的百分比。us的值比较高时,说明用户进程消耗的cpu时间多,但是如果长期大于50%,需要考虑优化用户的程序。 
    sy 列显示了内核进程所花费的cpu时间的百分比。这里us + sy的参考值为80%,如果us+sy 大于 80%说明可能存在CPU不足。 
    wa 列显示了IO等待所占用的CPU时间的百分比。这里wa的参考值为30%,如果wa超过30%,说明IO等待严重,这可能是磁盘大量随机访问造成的,也可能磁盘或者磁盘访问控制器的带宽瓶颈造成的(主要是块操作)。 
    id 列显示了cpu处在空闲状态的时间百分比

    Context Switch Rate = Interrupt Rate + TPS* N

    N= Context Switch Rate- Interrupt Rate/TPS

    N<4则属于正常状态

    2iostat

    iostat -xz 1

    输入iostat -x 1 10命令,表示开始监控输入输出状态,-x表示显示所有参数信息,1表示每隔1秒监控一次,10表示共监控10次。

    其中rsec/s表示读入,wsec/s表示每秒写入,这两个参数某一个特别高的时候就表示磁盘IO有很大压力,util表示IO使用率,如果接近100%,说明IO满负荷运转

    $ iostat -xz 1

    Linux 3.13.0-49-generic (titanclusters-xxxxx)  07/14/2015  _x86_64_ (32 CPU)

    avg-cpu:  %user  %nice %system %iowait  %steal   %idle

              73.96   0.00   3.73    0.03    0.06    22.21

    Device:   rrqm/s   wrqm/s   r/s   w/s    rkB/s    wkB/s  avgrq-sz  avgqu-sz  await  r_await  w_await  svctm  %util

    xvda       0.00     0.23    0.21  0.18   4.52      2.08    34.37     0.00    9.98    13.80    5.42     2.44   0.09

    xvdb       0.01     0.00    1.02  8.94   127.97   598.53   145.79    0.00    0.43    1.78    0

     

     

    iostat命令主要用于查看机器磁盘IO情况。该命令输出的列,主要含义是:

    • r/s, w/s, rkB/s, wkB/s:分别表示每秒读写次数和每秒读写数据量(千字节)。读写量过大,可能会引起性能问题。
    • await:IO操作的平均等待时间,单位是毫秒。这是应用程序在和磁盘交互时,需要消耗的时间,包括IO等待和实际操作的耗时。如果这个数值过大,可能是硬件设备遇到了瓶颈或者出现故障。
    • avgqu-sz:向设备发出的请求平均数量。如果这个数值大于1,可能是硬件设备已经饱和(部分前端硬件设备支持并行写入)。
    • %util:设备利用率。这个数值表示设备的繁忙程度,经验值是如果超过60,可能会影响IO性能(可以参照IO操作平均等待时间)。如果到达100%,说明硬件设备已经饱和。

    3Ps

    PS 命令是什么

    查看它的man手册可以看到,ps命令能够给出当前系统中进程的快照。它能捕获系统在某一事件的进程状态。如果你想不断更新查看的这个状态,可以使用top命令。

    ps命令支持三种使用的语法格式

    1. UNIX 风格,选项可以组合在一起,并且选项前必须有“-”连字符
    2. BSD 风格,选项可以组合在一起,但是选项前不能有“-”连字符
    3. GNU 风格的长选项,选项前有两个“-”连字符

    我们能够混用这几种风格,但是可能会发生冲突。本文使用 UNIX 风格的ps命令。这里有在日常生活中使用较多的ps命令的例子。

    1. 不加参数执行ps命令

    这是一个基本的 ps 使用。在控制台中执行这个命令并查看结果。

     

    不加选项执行ps命令

    结果默认会显示4列信息。

    • PID: 运行着的命令(CMD)的进程编号
    • TTY: 命令所运行的位置(终端)
    • TIME: 运行着的该命令所占用的CPU处理时间
    • CMD: 该进程所运行的命令

    这些信息在显示时未排序。

    2. 显示所有当前进程

    使用 -a 参数。-a 代表 all。同时加上x参数会显示没有控制终端的进程。

    1. $ ps -ax

    这个命令的结果或许会很长。为了便于查看,可以结合less命令和管道来使用。

    1. $ ps -ax | less

     

    ps all 信息

    3. 根据用户过滤进程

    在需要查看特定用户进程的情况下,我们可以使用 -u 参数。比如我们要查看用户'pungki'的进程,可以通过下面的命令:

    1. $ ps -u pungki

     

    通过用户过滤

    4. 通过cpu和内存使用来过滤进程

    也许你希望把结果按照 CPU 或者内存用量来筛选,这样你就找到哪个进程占用了你的资源。要做到这一点,我们可以使用 aux 参数,来显示全面的信息:

    1. $ ps -aux | less

     

    显示全面信息

    当结果很长时,我们可以使用管道和less命令来筛选。

    默认的结果集是未排好序的。可以通过 --sort命令来排序。

    根据 CPU 使用来升序排序

    1. $ ps -aux --sort -pcpu | less

     

    根据cpu使用排序

    根据 内存使用 来升序排序

    1. $ ps -aux --sort -pmem | less

     

    根据内存使用来排序

    我们也可以将它们合并到一个命令,并通过管道显示前10个结果:

    1. $ ps -aux --sort -pcpu,+pmem | head -n 10

    5. 通过进程名和PID过滤

    使用 -C 参数,后面跟你要找的进程的名字。比如想显示一个名为getty的进程的信息,就可以使用下面的命令:

    1. $ ps -C getty

     

    通过进程名和PID过滤

    如果想要看到更多的细节,我们可以使用-f参数来查看格式化的信息列表:

    1. $ ps -f -C getty

     

    通过进程名和PID过滤

    6. 根据线程来过滤进程

    如果我们想知道特定进程的线程,可以使用-L 参数,后面加上特定的PID。

    1. $ ps -L 1213

     

    根据线程来过滤进程

    7. 树形显示进程

    有时候我们希望以树形结构显示进程,可以使用 -axjf 参数。

    1. $ps -axjf

     

    树形显示进程

    或者可以使用另一个命令。

    1. $ pstree

     

    树形显示进程

    8. 显示安全信息

    如果想要查看现在有谁登入了你的服务器。可以使用ps命令加上相关参数:

    1. $ ps -eo pid,user,args

    参数 -e 显示所有进程信息,-o 参数控制输出。Pid,User 和 Args参数显示PID,运行应用的用户和该应用。

     

    显示安全信息

    能够与-e 参数 一起使用的关键字是args, cmd, comm, command, fname, ucmd, ucomm, lstart, bsdstart 和 start。

    9. 格式化输出root用户(真实的或有效的UID)创建的进程

    系统管理员想要查看由root用户运行的进程和这个进程的其他相关信息时,可以通过下面的命令:

    1. $ ps -U root -u root u

    -U 参数按真实用户ID(RUID)筛选进程,它会从用户列表中选择真实用户名或 ID。真实用户即实际创建该进程的用户。

    -u 参数用来筛选有效用户ID(EUID)。

    最后的u参数用来决定以针对用户的格式输出,由User, PID, %CPU, %MEM, VSZ, RSS, TTY, STAT, START, TIME 和 COMMAND这几列组成。

    这里有上面的命令的输出结果:

     

    show real and effective User ID

    10. 使用PS实时监控进程状态

    ps 命令会显示你系统当前的进程状态,但是这个结果是静态的。

    当有一种情况,我们需要像上面第四点中提到的通过CPU和内存的使用率来筛选进程,并且我们希望结果能够每秒刷新一次。为此,我们可以将ps命令和watch命令结合起来。

    1. $ watch -n 1 ‘ps -aux --sort -pmem, -pcpu’

     

    组合 ps 和 watch

    如果输出太长,我们也可以限制它,比如前20条,我们可以使用head命令来做到。

    1. $ watch -n 1 ‘ps -aux --sort -pmem, -pcpu | head 20’

     

    组合 ps 和 watch

    这里的动态查看并不像top或者htop命令一样。但是使用ps的好处是你能够定义显示的字段,你能够选择你想查看的字段。

    举个例子,如果你只需要看名为'pungki'用户的信息,你可以使用下面的命令:

    1. $ watch -n 1 ‘ps -aux -U pungki u --sort -pmem, -pcpu | head 20’

     

  • 相关阅读:
    iOS WKWebView与JS的交互
    iOS开发-APP图标、启动页、名字的设置
    [UIApplication sharedApplication].keyWindow和[[UIApplication sharedApplication].delegate window]区别
    iOS开发makeKeyAndVisible和makeKeyWindow区别
    iOS开发之微信第三方登录
    Xcode 10 Error: Multiple commands produce
    iOS开发WKWebView 返回H5上级页面
    iOS中nil、 Nil、 NULL和NSNull的区别
    iOS中dealloc原理
    HTTP原理及状态码汇总
  • 原文地址:https://www.cnblogs.com/shuyichao/p/10384806.html
Copyright © 2011-2022 走看看