美文网首页
linux 下查看性能状态命令

linux 下查看性能状态命令

作者: Prince_wyf | 来源:发表于2019-04-10 15:19 被阅读0次
    1. 解决问题: 性能优化,首先分析是由于哪些瓶颈造成的性能低下, 如 cpu 瓶颈,内存瓶颈,io瓶颈, 或者程序本身调用有问题
    2. 常用工具:
    • cpu瓶颈
     # top 命令
      top - 09:14:56 up 264 days, 20:56,  1 user,  load average: 0.02, 0.04, 0.00
        Tasks:  87 total,   1 running,  86 sleeping,   0 stopped,   0 zombie
        Cpu(s):  0.0%us,  0.2%sy,  0.0%ni, 99.7%id,  0.0%wa,  0.0%hi,  0.0%si,  0.2%st
        Mem:    377672k total,   322332k used,    55340k free,    32592k buffers
        Swap:   397308k total,    67192k used,   330116k free,    71900k cached
        PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND
        1 root      20   0  2856  656  388 S  0.0  0.2   0:49.40 init
        2 root      20   0     0    0    0 S  0.0  0.0   0:00.00 kthreadd
        3 root      20   0     0    0    0 S  0.0  0.0   7:15.20 ksoftirqd/0
        4 root      RT   0     0    0    0 S  0.0  0.0   0:00.00 migration/
    进入交互模式后:
    输入M,进程列表按内存使用大小降序排序,便于我们观察最大内存使用者使用有问题(检测内存泄漏问题);
    输入P,进程列表按CPU使用大小降序排序,便于我们观察最耗CPU资源的使用者是否有问题;
    top第三行显示当前系统的,其中有两个值很关键:
    %id:空闲CPU时间百分比,如果这个值过低,表明系统CPU存在瓶颈;
    %wa:等待I/O的CPU时间百分比,如果这个值过高,表明IO存在瓶颈;
    
    • 内存瓶颈
    # free 命令
    [/home/weber#]free
                 total       used       free     shared    buffers     cached
    Mem:        501820     452028      49792      37064       5056     136732
    -/+ buffers/cache:     310240     191580
    Swap:            0          0          0
    # 第二行是从操作系统的角度去计算的
    # 第三行是从应用程序的角度去计算的
    # 第三行:
        已使用的(used) 310240 = 第二行 used - buffers - cached
        空闲的(free):第二行 free + buffers + cached
    # 真正可使用的是第三行 free 的值
    
    • io 瓶颈
    # iostat 
    安装:yum -y install sysstat
    命令格式: iostat 选项  时间 次数
    选项:
    -C 显示CPU使用情况
    -d 显示磁盘使用情况
    -k 以 KB 为单位显示
    -m 以 M 为单位显示
    -N 显示磁盘阵列(LVM) 信息
    -n 显示NFS 使用情况
    -p[磁盘] 显示磁盘和分区的情况
    -t 显示终端和CPU的信息
    -x 显示详细信息
    -V 显示版本信息
    /root$iostat
    Linux 2.6.32-279.el6.x86_64 (colin)   07/16/2014      _x86_64_        (4 CPU)
    
    avg-cpu:  %user   %nice %system %iowait  %steal   %idle
    10.81    0.00   14.11    0.18    0.00   74.90
    
    Device:            tps   Blk_read/s   Blk_wrtn/s   Blk_read   Blk_wrtn
    sda               1.95         1.48        70.88    9145160  437100644
    dm-0              3.08         0.55        24.34    3392770  150087080
    dm-1              5.83         0.93        46.49    5714522  286724168
    dm-2              0.01         0.00         0.05      23930     289288
    
    # cpu属性值说明:
    %user:CPU处在用户模式下的时间百分比。
    %nice:CPU处在带NICE值的用户模式下的时间百分比。
    %system:CPU处在系统模式下的时间百分比。
    %iowait:CPU等待输入输出完成时间的百分比。
    %steal:管理程序维护另一个虚拟处理器时,虚拟CPU的无意识等待时间百分比。
    %idle:CPU空闲时间百分比。
    注:如果%iowait的值过高,表示硬盘存在I/O瓶颈,%idle值高,表示CPU较空闲,如果%idle值高但系统响应慢时,有可能是CPU等待分配内存,此时应加大内存容量。%idle值如果持续低于10,那么系统的CPU处理能力相对较低,表明系统中最需要解决的资源是CPU。
    
    # disk属性值说明:
    rrqm/s: 每秒进行 merge 的读操作数目。即 rmerge/s
    wrqm/s: 每秒进行 merge 的写操作数目。即 wmerge/s
    r/s: 每秒完成的读 I/O 设备次数。即 rio/s
    w/s: 每秒完成的写 I/O 设备次数。即 wio/s
    rsec/s: 每秒读扇区数。即 rsect/s
    wsec/s: 每秒写扇区数。即 wsect/s
    rkB/s: 每秒读K字节数。是 rsect/s 的一半,因为每扇区大小为512字节。
    wkB/s: 每秒写K字节数。是 wsect/s 的一半。
    avgrq-sz: 平均每次设备I/O操作的数据大小 (扇区)。
    avgqu-sz: 平均I/O队列长度。
    await: 平均每次设备I/O操作的等待时间 (毫秒)。
    svctm: 平均每次设备I/O操作的服务时间 (毫秒)。
    %util: 一秒中有百分之多少的时间用于 I/O 操作,即被io消耗的cpu百分比
    备注:如果 %util 接近 100%,说明产生的I/O请求太多,I/O系统已经满负荷,该磁盘可能存在瓶颈。如果 svctm 比较接近 await,说明 I/O 几乎没有等待时间;如果 await 远大于 svctm,说明I/O 队列太长,io响应太慢,则需要进行必要优化。如果avgqu-sz比较大,也表示有当量io在等待。
    
    实例:
    /root$iostat -d -x -k 1 1
    Linux 2.6.32-279.el6.x86_64 (colin)   07/16/2014      _x86_64_        (4 CPU)
    
    Device:         rrqm/s   wrqm/s     r/s     w/s    rkB/s    wkB/s avgrq-sz avgqu-sz   await  svctm  %util
    sda               0.02     7.25    0.04    1.90     0.74    35.47    37.15     0.04   19.13   5.58   1.09
    dm-0              0.00     0.00    0.04    3.05     0.28    12.18     8.07     0.65  209.01   1.11   0.34
    dm-1              0.00     0.00    0.02    5.82     0.46    23.26     8.13     0.43   74.33   1.30   0.76
    dm-2              0.00     0.00    0.00    0.01     0.00     0.02     8.00     0.00    5.41   3.28   0.00
    rrqm/s: 每秒进行 merge 的读操作数目.即 delta(rmerge)/s
    wrqm/s: 每秒进行 merge 的写操作数目.即 delta(wmerge)/s
    r/s: 每秒完成的读 I/O 设备次数.即 delta(rio)/s
    w/s: 每秒完成的写 I/O 设备次数.即 delta(wio)/s
    rsec/s: 每秒读扇区数.即 delta(rsect)/s
    wsec/s: 每秒写扇区数.即 delta(wsect)/s
    rkB/s: 每秒读K字节数.是 rsect/s 的一半,因为每扇区大小为512字节.(需要计算)
    wkB/s: 每秒写K字节数.是 wsect/s 的一半.(需要计算)
    avgrq-sz:平均每次设备I/O操作的数据大小 (扇区).delta(rsect+wsect)/delta(rio+wio)
    avgqu-sz:平均I/O队列长度.即 delta(aveq)/s/1000 (因为aveq的单位为毫秒).
    await: 平均每次设备I/O操作的等待时间 (毫秒).即 delta(ruse+wuse)/delta(rio+wio)
    svctm: 平均每次设备I/O操作的服务时间 (毫秒).即 delta(use)/delta(rio+wio)
    %util: 一秒中有百分之多少的时间用于 I/O 操作,或者说一秒中有多少时间 I/O 队列是非空的,即 delta(use)/s/1000 (因为use的单位为毫秒)
    如果 %util 接近 100%,说明产生的I/O请求太多,I/O系统已经满负荷,该磁盘可能存在瓶颈。 idle小于70% IO压力就较大了,一般读取速度有较多的wait。
    如果 svctm 比较接近 await,说明 I/O 几乎没有等待时间;如果 await 远大于 svctm,说明 I/O 队列太长,应用得到的响应时间变慢,如果响应时间超过了用户可以容许的范围,这时可以考虑更换更快的磁盘,调整内核 elevator 算法,优化应用,或者升级 CPU。
    
    形象比喻:
    r/s+w/s 类似于交款人的总数
    平均队列长度(avgqu-sz)类似于单位时间里平均排队人的个数
    平均服务时间(svctm)类似于收银员的收款速度
    平均等待时间(await)类似于平均每人的等待时间
    平均I/O数据(avgrq-sz)类似于平均每人所买的东西多少
    I/O 操作率 (%util)类似于收款台前有人排队的时间比例
    
    • 拓展命令
    # lsof 
    lsof(list open files)是一个查看当前系统文件的工具。在linux环境下,任何事物都以文件的形式存在,通过文件不仅仅可以访问常规数据,还可以访问网络连接和硬件。如传输控制协议 (TCP) 和用户数据报协议 (UDP) 套接字等,系统在后台都为该应用程序分配了一个文件描述符,该文件描述符提供了大量关于这个应用程序本身的信息。
    
    lsof打开的文件可以是:
    普通文件
    目录
    网络文件系统的文件
    字符或设备文件
    (函数)共享库
    管道,命名管道
    符号链接
    网络文件(例如:NFS file、网络socket,unix域名socket)
    还有其它类型的文件,等等
    
    命令参数
    -a 列出打开文件存在的进程
    -c<进程名> 列出指定进程所打开的文件
    -g 列出GID号进程详情
    -d<文件号> 列出占用该文件号的进程
    +d<目录> 列出目录下被打开的文件
    +D<目录> 递归列出目录下被打开的文件
    -n<目录> 列出使用NFS的文件
    -i<条件> 列出符合条件的进程。(4、6、协议、:端口、 @ip )
    -p<进程号> 列出指定进程号所打开的文件
    -u 列出UID号进程详情
    -h 显示帮助信息
    -v 显示版本信息
    
    实例
    $lsof| more
    COMMAND     PID      USER   FD      TYPE             DEVICE SIZE/OFF       NODE NAME
    init          1      root  cwd       DIR              253,0     4096          2 /
    init          1      root  rtd       DIR              253,0     4096          2 /
    init          1      root  txt       REG              253,0   150352    1310795 /sbin/init
    init          1      root  mem       REG              253,0    65928    5505054 /lib64/libnss_files-2.12.so
    init          1      root  mem       REG              253,0  1918016    5521405 /lib64/libc-2.12.so
    init          1      root  mem       REG              253,0    93224    5521440 /lib64/libgcc_s-4.4.6-20120305.so.1
    init          1      root  mem       REG              253,0    47064    5521407 /lib64/librt-2.12.so
    init          1      root  mem       REG              253,0   145720    5521406 /lib64/libpthread-2.12.so
    
    COMMAND:进程的名称
    
    PID:进程标识符
    
    PPID:父进程标识符(需要指定-R参数)
    
    USER:进程所有者
    
    PGID:进程所属组
    
    FD:文件描述符,应用程序通过文件描述符识别该文件。如cwd、txt等:
    
    (1)cwd:表示current work dirctory,即:应用程序的当前工作目录,这是该应用程序启动的目录,除非它本身对这个目录进行更改
    (2)txt :该类型的文件是程序代码,如应用程序二进制文件本身或共享库,如上列表中显示的 /sbin/init 程序
    (3)lnn:library references (AIX);
    (4)er:FD information error (see NAME column);
    (5)jld:jail directory (FreeBSD);
    (6)ltx:shared library text (code and data);
    (7)mxx :hex memory-mapped type number xx.
    (8)m86:DOS Merge mapped file;
    (9)mem:memory-mapped file;
    (10)mmap:memory-mapped device;
    (11)pd:parent directory;
    (12)rtd:root directory;
    (13)tr:kernel trace file (OpenBSD);
    (14)v86  VP/ix mapped file;
    (15)0:表示标准输入
    (16)1:表示标准输出
    (17)2:表示标准错误
    一般在标准输出、标准错误、标准输入后还跟着文件状态模式:r、w、u等
    (1)u:表示该文件被打开并处于读取/写入模式
    (2)r:表示该文件被打开并处于只读模式
    (3)w:表示该文件被打开并处于
    (4)空格:表示该文件的状态模式为unknow,且没有锁定
    (5)-:表示该文件的状态模式为unknow,且被锁定
    同时在文件状态模式后面,还跟着相关的锁
    (1)N:for a Solaris NFS lock of unknown type;
    (2)r:for read lock on part of the file;
    (3)R:for a read lock on the entire file;
    (4)w:for a write lock on part of the file;(文件的部分写锁)
    (5)W:for a write lock on the entire file;(整个文件的写锁)
    (6)u:for a read and write lock of any length;
    (7)U:for a lock of unknown type;
    (8)x:for an SCO OpenServer Xenix lock on part      of the file;
    (9)X:for an SCO OpenServer Xenix lock on the      entire file;
    (10)space:if there is no lock.
    TYPE:文件类型,如DIR、REG等,常见的文件类型:
    (1)DIR:表示目录
    (2)CHR:表示字符类型
    (3)BLK:块设备类型
    (4)UNIX: UNIX 域套接字
    (5)FIFO:先进先出 (FIFO) 队列
    (6)IPv4:网际协议 (IP) 套接字
    
    DEVICE:指定磁盘的名称
    
    SIZE:文件的大小
    
    NODE:索引节点(文件在磁盘上的标识)
    
    NAME:打开文件的确切名称
    实例2: lsof -c mysql  # 查看某个进程对应的文件
    实例3: lsof -a /bin/bash # 查看某个文件对应的进程
    实例4: lsof -i :80  # 找出哪些文件在使用80端口
    实例5: lsof -i # 查看所有网络连接
    实例6: lsof -i tcp # 查看所有 tcp 连接
    

    相关文章

      网友评论

          本文标题:linux 下查看性能状态命令

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