服务器CPU状态:top指令、火焰图、perf

top

top类似ps指令,但可以进入对话模式,动态显示实时状况

进入top后的指令
  • l – 关闭或开启第一部分第一行 top 信息的表示
  • t – 关闭或开启第一部分第二行 Tasks 和第三行 Cpus 信息的表示
  • m – 关闭或开启第一部分第四行 Mem 和 第五行 Swap 信息的表示
  • N – 以 PID 的大小的顺序排列表示进程列表
  • P – 以 CPU 占用率大小的顺序排列进程列表(默认按此排序)
  • M – 以内存占用率大小的顺序排列进程列表
  • h – 显示帮助
  • n – 设置在进程列表所显示进程的数量
  • q – 退出 top
  • s – 改变画面更新周期
  • f – 编辑哪些列显示
  • 1 – 按逻辑CPU区分显示情况
  • u – 按用户区分显示情况
  • E – 切换显示单位(KB\MB\GB)
显示内容
top - 15:17:11 up 41 days,  5:34,  0 users,  load average: 0.08, 0.11, 0.12

系统时间,系统至今运行时间,当前登录用户数,1、5、15分钟内平均系统负载(即任务队列的平均长度,通常数值不超过机器的总核数,就没问题)

Tasks:  13 total,   1 running,  12 sleeping,   0 stopped,   0 zombie

当前进程,运行中进程,休眠进程,停止进程,僵尸进程

%Cpu(s): 10.0 us,  3.3 sy,  0.0 ni, 86.7 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st

CPU空间占用情况

KiB Mem :  7862312 total,   895436 free,  2730104 used,  4236772 buff/cache
KiB Swap:        0 total,        0 free,        0 used.  4792852 avail Mem

内存占用情况,以及硬盘提供的SWAP交换区占用情况。当内存不够用时开始占用SWAP

  • 进程信息
    PID 进程id
    USER 进程所有者的用户名
    PR 优先级
    NI nice值,负值表示高优先级,正值表示低优先级
    VIRT 进程使用的虚拟内存总量,单位kb。VIRT=SWAP+RES
    RES 进程使用的、未被换出的物理内存大小,单位kb。RES=CODE+DATA
    SHR 共享内存大小,单位kb
    S 进程状态。D=不可中断的睡眠状态 R=运行 S=睡眠 T=跟踪/停止 Z=僵尸进程
    %CPU 上次更新到现在的CPU时间占用百分比
    %MEM 进程使用的物理内存百分比
    TIME+ 进程使用的CPU时间总计,单位1/100秒
    COMMAND 命令名/命令行

火焰图(Flame Graph)

svg格式的矢量图。
Y轴表示函数调用栈的深度,最顶端是当前正在占用CPU的函数,下方都是父函数。
X轴表示函数在采样中出现的频率。
火焰图颜色是随机的暖色调,不代表实际性能。

火焰图类型

On-CPU火焰图,专用于表现计算密集型。
Off-CPU火焰图,专用于表现IO密集型。

使用Linux中自带的perf工具绘制火焰图:

  1. 使用perf采集进程数据,生成perf.data文件
sudo perf record -F 99 -p 2512 -g -- sleep 60

record:表示采集系统事件,没有采用 -e 执行采集事件,则默认采集 cycles(即 CPU clock 周期)。
-F 99:指定采样频率为 99Hz(每秒99次),如果 99次都返回同一个函数名, 那就说明 CPU 这一秒钟都在执行同一个函数,可能存在性能问题。
-p 2512:指定进程号,对某一个进程分析。
-g:表示记录调用栈。
sleep 30:表示持续 30 秒

  1. 生成火焰图
# 生成折叠后的调用栈
sudo perf script -i perf.data &> perf.unfold

# 生成火焰图
./stackcollapse-perf.pl perf.unfold &> perf.folded

# 生成 svg 图
./flamegraph.pl perf.folded > perf.svg
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。