1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107
| CPU 使用率 用户 CPU 使用率 user - 用户态 CPU 使用率 nice - 低优先级用户态 CPU 使用率 系统 CPU 使用率 软中断和硬中断 CPU 使用率 其他 steal - 虚拟化环境中会用到的窃取 CPU 利用率:被其他虚拟机占用的 CPU 时间百分比 guest - 客户 CPU 使用率:运行客户虚拟机的 CPU 时间百分比
上下文切换 自愿上下文切换变多了,说明进程都在等待资源,有可能发生了 I/O 等其他问题 非自愿上下文切换变多了,说明进程都在被强制调度,也就是都在争抢 CPU,说明 CPU 的确成了瓶颈; 中断次数变多了,说明 CPU 被中断处理程序占用,还需要通过查看 /proc/interrupts 文件来分析具体的中断类型。
平均负载 如果 1 分钟、5 分钟、15 分钟的三个值基本相同,或者相差不大,那就说明系统负载很平稳。 如果 1 分钟的值远小于 15 分钟的值,就说明系统最近 1 分钟的负载在减少,而过去 15 分钟内却有很大的负载。 如果 1 分钟的值远大于 15 分钟的值,就说明最近 1 分钟的负载在增加 这种增加有可能只是临时性的,也有可能还会持续增加下去,所以就需要持续观察。 一旦 1 分钟的平均负载接近或超过了 CPU 的个数,就意味着系统正在发生过载的问题,这时就得分析调查是哪里导致的问题,并要想办法优化了。
CPU 缓存命中率
工具 平均负载 uptime top 系统整体 CPU 使用率 vmstat mpstat 运行 mpstat 查看 CPU 使用率的变化情况: # -P ALL 表示监控所有CPU,后面数字5表示间隔5秒后输出一组数据 $ mpstat -P ALL 5 top sar /proc/stat 其他性能工具的数据来源 进程 CPU 使用率 top pidstat # 间隔5秒后输出一组数据 $ pidstat -u 5 1 # 每隔1秒输出1组数据(需要 Ctrl+C 才结束) # -w参数表示输出进程切换指标,而-u参数则表示输出CPU使用指标 $ pidstat -w -u 1 pidstat 默认显示进程的指标数据,加上 -t 参数后,才会输出线程的指标。 # 每隔1秒输出一组数据(需要 Ctrl+C 才结束) # -wt 参数表示输出线程的上下文切换指标 $ pidstat -wt 1 ps htop atop 系统上下文切换 vmstat # 每隔5秒输出1组数据 # vmstat 5 cs(context switch)是每秒上下文切换的次数。 in(interrupt)则是每秒中断的次数。 r(Running or Runnable)是就绪队列的长度,也就是正在运行和等待 CPU 的进程数。 b(Blocked)则是处于不可中断睡眠状态的进程数。 进程上下文切换 pidstat 给它加上 -w 选项,你就可以查看每个进程上下文切换的情况了 $ pidstat -w 5 1 cswch ,表示每秒自愿上下文切换(voluntary context switches)的次数 nvcswch ,表示每秒非自愿上下文切换(non voluntary context switches)的次数 软中断 top /proc/softirqs mpstat 网络 dstat sar # -n DEV 表示显示网络收发的报告,间隔1秒输出一组数据 $ sar -n DEV 1 tcpdump # -i eth0 只抓取eth0网卡,-n不解析协议名和主机名 # tcp port 80表示只抓取tcp协议并且端口号为80的网络帧 $ tcpdump -i eth0 -n tcp port 80 I/O dstat dstat 的好处是,可以同时查看 CPU 和 I/O 这两种资源的使用情况,便于对比分析。 # 间隔1秒输出10组数据 $ dstat 1 10 ipstat # -d 展示 I/O 统计数据,-p 指定进程号,间隔 1 秒输出 3 组数据 $ pidstat -d -p 4344 1 3 sar CPU 个数 /proc/cpuinfo lscpu 事件剖析 perf perf top:类似于 top,它能够实时显示占用 CPU 时钟最多的函数或者指令,因此可以用来查找热点函数 第一行包含三个数据,分别是采样数(Samples)、事件类型(event)和事件总数量(Event count)。 再往下看是一个表格式样的数据,每一行包含四列,分别是: Overhead ,是该符号的性能事件在所有采样中的比例,用百分比来表示。 Shared ,是该函数或指令所在的动态共享对象(Dynamic Shared Object),如内核、进程名、动态链接库名、内核模块名等。 Object ,是动态共享对象的类型。比如 [.] 表示用户空间的可执行程序、或者动态链接库,而 [k] 则表示内核空间。 Symbol 是符号名,也就是函数名。当函数名未知时,用十六进制的地址来表示。 perf record 和 perf report $ perf record # 按Ctrl+C终止采样 § $ perf report # 展示类似于perf top的报告 # -g开启调用关系分析,-p指进程号21515 $ perf top -g -p 21515 execsnoop
|