• 每秒钟触发 250 次时间中断
    • grep 'CONFIG_HZ=' /boot/config-$(uname -r)
      • CONFIG_HZ=250  #代表每秒250次中断 ​​​​​​
      • uname -r   #输出内核版本号
  • 只保留各个 CPU 的数据
    • cat /proc/stat | grep ^cpu
  • 默认每 3 秒刷新一次
    • top
      • 只需要按下数字 1 ,就可以切换到每个 CPU 的使用率了
  • GDB 调试程序的过程会中断程序运行,这在线上环境往往是不允许的。
    • 所以,GDB 只适合用在性能分析的后期,当你找到了出问题的大致函数后,线下再借助它来进一步调试函数内部的问题。
  • perf 是 Linux 2.6.31 以后内置的性能分析工具 ​​​​​​​
    • 安装perf
      • apt install linux-tools-common      
      • apt install  linux-tools-4.15.0-128-generic     
      • apt install linux-cloud-tools-4.15.0-128-generic
  • perf top ​​​​​​​
    • 第一列 Overhead ,是该符号的性能事件在所有采样中的比例,用百分比来表示。

    • 第二列 Shared ,是该函数或指令所在的动态共享对象(Dynamic Shared Object),如内核、进程名、动态链接库名、内核模块名等。

    • 第三列 Object ,是动态共享对象的类型。比如 [.] 表示用户空间的可执行程序、或者动态链接库,而 [k] 则表示内核空间。

    • 最后一列 Symbol 是符号名,也就是函数名。当函数名未知时,用十六进制的地址来表示

  • perf record 和 perf report ​​​​​​​

  • https://github.com/feiskyer/linux-perf-examples/blob/master/nginx-high-cpu/README.md

  • # 并发 10 个请求测试 Nginx 性能,总共测试 100 个请求 ​​​​​​​

    • ab -c 10 -n 100 http://10.241.132.213:10000/

  • # -g 开启调用关系分析,-p 指定 php-fpm 的进程号 21515 ​​​​​​​

    • perf top -g -p 21515

 
 
04-13 20:18