zoukankan      html  css  js  c++  java
  • Linux下如何快速定位系统瓶颈在哪里

    一.  理解相关的性能指标

    1.理解CPU使用率

    CPU 使用率描述了非空闲时间占总 CPU 时间的百分比,根据 CPU 上运行任务的不同,又被分为用户 CPU、系统 CPU、等待 I/O CPU、软中断和硬中断

    >用户 CPU 使用率,包括用户态 CPU 使用率(user)和低优先级用户态 CPU 使用率(nice),表示 CPU 在用户态运行时间百分比,用户 CPU 使用率高,通常说明有应用程序比较繁忙

    >系统 CPU 使用率,表示 CPU 在内核态运行的时间百分比(不包括中断),系统 CPU 使用率高,说明内核比较繁忙

    >等待 I/O 的 CPU 使用率,通常也称为 iowait,表示等待 I/O 的时间百分比,iowait 高,通常说明系统与硬件设备的 I/O 交互时间比较长

    >中断 CPU 使用率,分别表示内核调用软中断处理程序、硬中断处理程序的时间百分比,它们的使用率高,通常说明系统发生了大量的中断

    >除上面这些,还有在虚拟化环境中会用到的窃取 CPU 使用率(steal)和客户 CPU 使用率(guest),分别表示被其他虚拟机占用的 CPU 时间百分比,运行客户虚拟机的 CPU 时间百分比

    2.理解平均负载

    平均负载是指系统在单位时间内平均活跃进程数,包括活跃进程和不可中断进程,它反应了系统的整体负载情况。理想情况下,平均负载等于逻辑 CPU 个数,表示每个 CPU 恰好被充分利用

    3.理解上下文切换

    上下文切换是指CPU因进程、线程或中断处理而进行的寄存器、计数器的保存和恢复操作。

    其一,为了保证所有进程可以的公平调度,CPU 时间被划分为一段段的时间片,这些时间片再被轮流分配给各个进程。这样,当某个进程的时间片耗尽了,就会被系统挂起,切换到其它正在等待 CPU 的进程运行。

    其二,进程在系统资源不足(比如内存不足)时,要等到资源满足后才可以运行,这个时候进程也会被挂起,并由系统调度其他进程运行。

    其三,当进程通过睡眠函数  sleep 这样的方法将自己主动挂起时,自然也会重新调度。

    其四,当有优先级更高的进程运行时,为了保证高优先级进程的运行,当前进程会被挂起,由高优先级进程来运行。

    其五,发生硬件中断时,CPU 上的进程会被中断挂起,转而执行内核中的中断服务程序。

    二.  合理利用工具

    1.stress:系统压力测试工具,常用作用作异常进程模拟平均负载升高的场景
    模拟cpu密集型: stress --cpu 1 --timeout 600
    模拟IO密集型: stress -i 1 --timeout 600
    模拟进程密集型:stress -c 8 --timeout 600

    2.mpstat:常用的多核CPU性能分析工具,用来实时查看每个CPU的性能指标

    root>mpstat -P ALL 5

    Linux 3.10.0-514.6.2.el7.x86_64 (Redis1) 05/20/2020 _x86_64_ (4 CPU)

    02:12:51 PM CPU %usr %nice %sys %iowait %irq %soft %steal %guest %gnice %idle
    02:12:56 PM all 0.15 0.00 0.15 0.00 0.00 0.00 0.00 0.00 0.00 99.70
    02:12:56 PM 0 0.20 0.00 0.20 0.00 0.00 0.00 0.00 0.00 0.00 99.60
    02:12:56 PM 1 0.20 0.00 0.20 0.00 0.00 0.00 0.00 0.00 0.00 99.60
    02:12:56 PM 2 0.20 0.00 0.20 0.00 0.00 0.00 0.00 0.00 0.00 99.60
    02:12:56 PM 3 0.20 0.00 0.20 0.00 0.00 0.20 0.00 0.00 0.00 99.40

    3.iostat:查看系统CPU和磁盘IO读写情况

    root>iostat -d 2 2
    Linux 3.10.0-514.6.2.el7.x86_64 (Redis1) 05/20/2020 _x86_64_ (4 CPU)

    Device: tps kB_read/s kB_wrtn/s kB_read kB_wrtn
    vdb 2.10 0.01 972.60 271809 24005518460

    Device: tps kB_read/s kB_wrtn/s kB_read kB_wrtn
    vdb 0.00 0.00 0.00 0 0


    4.pidstat: 查看指定或全部进程的CPU、内存、I/O 以及上下文切换情况

    root> pidstat -d
    Linux 3.10.0-514.6.2.el7.x86_64 (Redis1) 05/20/2020 _x86_64_ (4 CPU)

    02:35:45 PM UID PID kB_rd/s kB_wr/s kB_ccwr/s Command
    02:35:45 PM 0 1 0.01 0.10 0.01 systemd
    02:35:45 PM 0 44 0.00 0.00 0.00 khugepaged
    02:35:45 PM 0 284 0.00 1.32 0.00 jbd2/vda1-8


    5.vmstat:查看系统内存试用和CPU的上下文切换及中断处理

    root>vmstat 2 5
    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 1818008 298148 4534344 0 0 0 247 0 0 1 0 98 0 0
    0 0 0 1817372 298148 4534344 0 0 0 0 1059 1533 1 1 99 0 0
    0 0 0 1816876 298148 4534348 0 0 0 24 949 1447 0 0 99 0 0
    0 0 0 1816876 298148 4534348 0 0 0 34 874 1404 0 0 99 0 0
    0 0 0 1816752 298148 4534348 0 0 0 12 871 1385 0 0 100 0 0

    6.perf top: 以事件采集为基础分析系统各种事件和内核性能,还可以分析指定应用程序的性能问题

    root> perf top
    Samples: 1K of event 'cpu-clock', 4000 Hz, Event count (approx.): 425250000 lost: 0/0 drop: 0/0
    Overhead Shared Object Symbol
    5.47% perf [.] __symbols__insert
    4.17% perf [.] rb_next
    3.94% libc-2.17.so [.] __GI_____strtoull_l_internal
    3.47% [kernel] [k] kallsyms_expand_symbol.constprop.1
    第一列 Overhead 该符号的性能事件在所有采样中的比例,用百分比来表示
    第二列 Shared 该函数或指令所在的动态共享对象(Dynamic Shared Object)如内核、进程名、动态链接库名、内核模块名
    第三列 Object 动态共享对象的类型。比如 [.] 表示用户空间的可执行程序、或者动态链接库,而 [k] 则表示内核空间
    第四列 Symbol 符号名,也就是函数名。当函数名未知时,用十六进制的地址来表示

    root>perf top -g -p pid
    -g:开启调用关系 -p:指定进程的pid

    7.dstat:吸收了vmstat iostat ifstat集中工具的有点,可同时观察CPU、内存、IO、网络的试用情况

    root> dstat 1 10
    ----total-cpu-usage---- -dsk/total- -net/total- ---paging-- ---system--
    usr sys idl wai hiq siq| read writ| recv send| in out | int csw
    1 1 98 0 0 0| 14k 77k| 0 0 | 0 0 | 342 2620
    2 3 96 0 0 0| 0 0 |1484B 2306B| 0 0 |3022 5126
    2 3 95 0 0 0| 0 0 | 29k 20k| 0 0 |3078 5201
    2 2 96 0 0 0| 0 336k| 94k 19k| 0 0 |3010 5189
    2 4 94 0 0 0| 0 0 | 15k 13k| 0 0 |3036 5055

    三. 工具速查

    1.根据指标找工具

    2.根据工具查指标

  • 相关阅读:
    出栈序列的可能性判定
    阿里离线数据处理平台2013暑期学校
    终于算完了这道『1+1』
    数据结构学习笔记之一 链表
    经典解释监视器和对象锁
    Sybase中字符串替换函数 STR REPLACE
    使用Arrays sort 方法進行排序
    clustered和nonclustered索引的区别
    Java序列化的作用和反序列化
    Java多线程下载并具断点续传功能JAR
  • 原文地址:https://www.cnblogs.com/lishug/p/12925009.html
Copyright © 2011-2022 走看看