Linux性能优化实战
倪朋飞
微软资深工程师,Kubernetes项目维护者
立即订阅
23395 人已学习
课程目录
已完结 64 讲
0/4登录后,你可以任选4讲全文学习。
开篇词 (2讲)
开篇词 | 别再让Linux性能问题成为你的绊脚石
免费
01 | 如何学习Linux性能优化?
CPU 性能篇 (13讲)
02 | 基础篇:到底应该怎么理解“平均负载”?
03 | 基础篇:经常说的 CPU 上下文切换是什么意思?(上)
04 | 基础篇:经常说的 CPU 上下文切换是什么意思?(下)
05 | 基础篇:某个应用的CPU使用率居然达到100%,我该怎么办?
06 | 案例篇:系统的 CPU 使用率很高,但为啥却找不到高 CPU 的应用?
07 | 案例篇:系统中出现大量不可中断进程和僵尸进程怎么办?(上)
08 | 案例篇:系统中出现大量不可中断进程和僵尸进程怎么办?(下)
09 | 基础篇:怎么理解Linux软中断?
10 | 案例篇:系统的软中断CPU使用率升高,我该怎么办?
11 | 套路篇:如何迅速分析出系统CPU的瓶颈在哪里?
12 | 套路篇:CPU 性能优化的几个思路
13 | 答疑(一):无法模拟出 RES 中断的问题,怎么办?
14 | 答疑(二):如何用perf工具分析Java程序?
内存性能篇 (8讲)
15 | 基础篇:Linux内存是怎么工作的?
16 | 基础篇:怎么理解内存中的Buffer和Cache?
17 | 案例篇:如何利用系统缓存优化程序的运行效率?
18 | 案例篇:内存泄漏了,我该如何定位和处理?
19 | 案例篇:为什么系统的Swap变高了(上)
20 | 案例篇:为什么系统的Swap变高了?(下)
21 | 套路篇:如何“快准狠”找到系统内存的问题?
22 | 答疑(三):文件系统与磁盘的区别是什么?
I/O 性能篇 (10讲)
23 | 基础篇:Linux 文件系统是怎么工作的?
24 | 基础篇:Linux 磁盘I/O是怎么工作的(上)
25 | 基础篇:Linux 磁盘I/O是怎么工作的(下)
26 | 案例篇:如何找出狂打日志的“内鬼”?
27 | 案例篇:为什么我的磁盘I/O延迟很高?
28 | 案例篇:一个SQL查询要15秒,这是怎么回事?
29 | 案例篇:Redis响应严重延迟,如何解决?
30 | 套路篇:如何迅速分析出系统I/O的瓶颈在哪里?
31 | 套路篇:磁盘 I/O 性能优化的几个思路
32 | 答疑(四):阻塞、非阻塞 I/O 与同步、异步 I/O 的区别和联系
网络性能篇 (13讲)
33 | 关于 Linux 网络,你必须知道这些(上)
34 | 关于 Linux 网络,你必须知道这些(下)
35 | 基础篇:C10K 和 C1000K 回顾
36 | 套路篇:怎么评估系统的网络性能?
37 | 案例篇:DNS 解析时快时慢,我该怎么办?
38 | 案例篇:怎么使用 tcpdump 和 Wireshark 分析网络流量?
39 | 案例篇:怎么缓解 DDoS 攻击带来的性能下降问题?
40 | 案例篇:网络请求延迟变大了,我该怎么办?
41 | 案例篇:如何优化 NAT 性能?(上)
42 | 案例篇:如何优化 NAT 性能?(下)
43 | 套路篇:网络性能优化的几个思路(上)
44 | 套路篇:网络性能优化的几个思路(下)
45 | 答疑(五):网络收发过程中,缓冲区位置在哪里?
综合实战篇 (13讲)
46 | 案例篇:为什么应用容器化后,启动慢了很多?
47 | 案例篇:服务器总是时不时丢包,我该怎么办?(上)
48 | 案例篇:服务器总是时不时丢包,我该怎么办?(下)
49 | 案例篇:内核线程 CPU 利用率太高,我该怎么办?
50 | 案例篇:动态追踪怎么用?(上)
51 | 案例篇:动态追踪怎么用?(下)
52 | 案例篇:服务吞吐量下降很厉害,怎么分析?
53 | 套路篇:系统监控的综合思路
54 | 套路篇:应用监控的一般思路
55 | 套路篇:分析性能问题的一般步骤
56 | 套路篇:优化性能问题的一般方法
57 | 套路篇:Linux 性能工具速查
58 | 答疑(六):容器冷启动如何性能分析?
加餐篇 (4讲)
加餐(一) | 书单推荐:性能优化和Linux 系统原理
加餐(二) | 书单推荐:网络原理和 Linux 内核实现
用户故事 | “半路出家 ”,也要顺利拿下性能优化!
用户故事 | 运维和开发工程师们怎么说?
结束语 (1讲)
结束语 | 愿你攻克性能难关
Linux性能优化实战
登录|注册

50 | 案例篇:动态追踪怎么用?(上)

倪朋飞 2019-03-20
你好,我是倪朋飞。
上一节,我以 ksoftirqd CPU 使用率高的问题为例,带你一起学习了内核线程 CPU 使用率高时的分析方法。先简单回顾一下。
当碰到内核线程的资源使用异常时,很多常用的进程级性能工具,并不能直接用到内核线程上。这时,我们就可以使用内核自带的 perf 来观察它们的行为,找出热点函数,进一步定位性能瓶颈。不过,perf 产生的汇总报告并不直观,所以我通常也推荐用火焰图来协助排查。
其实,使用 perf 对系统内核线程进行分析时,内核线程依然还在正常运行中,所以这种方法也被称为动态追踪技术。
动态追踪技术,通过探针机制,来采集内核或者应用程序的运行信息,从而可以不用修改内核和应用程序的代码,就获得丰富的信息,帮你分析、定位想要排查的问题。
以往,在排查和调试性能问题时,我们往往需要先为应用程序设置一系列的断点(比如使用 GDB),然后以手动或者脚本(比如 GDB 的 Python 扩展)的方式,在这些断点处分析应用程序的状态。或者,增加一系列的日志,从日志中寻找线索。
不过,断点往往会中断应用的正常运行;而增加新的日志,往往需要重新编译和部署。这些方法虽然在今天依然广泛使用,但在排查复杂的性能问题时,往往耗时耗力,更会对应用的正常运行造成巨大影响。
取消
完成
0/1000字
划线
笔记
复制
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
该试读文章来自付费专栏《Linux性能优化实战》,如需阅读全部文章,
请订阅文章所属专栏。
立即订阅
登录 后留言

精选留言(21)

  • lizh
    早些时间整理过的一篇文章,和这个主题很match,分享在这里^_^。https://leezhenghui.github.io/linux/2019/03/05/exploring-usdt-on-linux.html

    作者回复: 👍谢谢分享

    2019-03-20
    14
  • Huayra
    将性能优化大师Brendan Gregg的blog阅读一遍,就能够更深刻地理解这一章。据说,OpenResty的作者张亦春也阅读过Brendan Gregg的所有博客,他现在更进一步地开发了一个将高级编程语言编译成动态追踪脚本的工具

    作者回复: 👍

    2019-03-20
    5
  • 我来也
    [D50打卡]
    课后思考题,我的思考,不一定准确.
    我觉得昨天的perf和火焰图,是采样. 而今天的ftrace是实实在在的分析每次一的调用.
    虽然都可以看调用堆栈和耗时比例. 但是ftrace应该是非常准确,而perf只是一个采样,比如采样频率1%.

    我觉得找大方向时,使用perf和火焰图, 找具体问题时,用ftrace.毕竟ftrace需要知道调用的系统函数.
    ftrace需要追踪的信息可以来源于perf的分析结果.

    作者回复: 嗯嗯,非常准确。函数跟踪需要实现知道函数名,而perf/火焰图就可以找出热点函数。

    2019-03-20
    3
  • 松花皮蛋me
    这篇完全听不懂
    2019-03-20
    3
  • 在和同事讨论nodejs使用从thrift转化到grpc时候会性能下降问题就用老师介绍

    strace -T -ttt -p pid

    找到根源。

    grpc -node版本发送分两次writev系统调用,第一次发送 grpc路径,第二次发送参数。比thrift协议一次效率一些。

    再发现node并发次数多,回调算时间往往是多个调用所花的时间。这些效率都用strace看到,在前面时间

    作者回复: 👍谢谢分享

    2019-03-23
    1
  • 青石
    #echo function_graph > current_trace
    -bash: current_trace: Permission denied

    报上面错误的同学,可以尝试下面的命令,环境是CentOS 7.6
    $ echo function_graph > current_tracer
    $ echo funcgraph-proc > trace_options

    作者回复: 谢谢分享

    2019-03-22
    1
  • xfan
    我的机器一运行
    echo function_graph > current_trace或trace-cmd的命令就卡死,tty1也输入不了,我现在是ubuntu18.04 双处理器 1G内存

    作者回复: 这个问题我也是第一次见到,检查下系统日志里面有没有错误?

    2019-03-22
    1
  • ninuxer
    打卡day53
    个人认为perf的功能全面,可用于系统和内核的分析,ftrace用于内核级别的分析~
    2019-03-20
    1
  • 辉晖
    执行这句机器卡死,只能强制重启:
    echo funcgraph-proc > trace_options
    执行这句报错:
    # trace-cmd record -p function_graph -g do_sys_open -O funcgraph-proc ls
      plugin 'function_graph'
    trace-cmd: Permission denied
      can't create recorder
    trace-cmd: Permission denied
      can't create recorder
    trace-cmd: Permission denied
      can't create recorder
    trace-cmd: Permission denied
      can't create recorder
    available_events events options set_ftrace_notrace trace_clock tracing_thresh
    available_filter_functions free_buffer per_cpu set_ftrace_pid trace_marker uprobe_events
    available_tracers function_profile_enabled printk_formats set_graph_function trace_options uprobe_profile
    buffer_size_kb hwlat_detector README snapshot trace_pipe
    buffer_total_size_kb instances saved_cmdlines stack_max_size trace_stat
    current_tracer kprobe_events saved_cmdlines_size stack_trace tracing_cpumask
    dyn_ftrace_total_info kprobe_profile set_event stack_trace_filter tracing_max_latency
    enabled_functions max_graph_depth set_ftrace_filter trace tracing_on
    trace-cmd: Permission denied
      Error creating output file
    2019-11-25
  • z.l
    请教下java里常用的btrace和今天讲的几个工具是什么关系啊

    作者回复: 今天介绍的工具都是系统级工具,可以用在任何应用;而btrace是应用级的,只能用在Java应用上。

    2019-04-21
  • 如果
    DAY50,打卡
    2019-04-18
  • 大坏狐狸
    $ trace-cmd record -p function_graph -g do_sys_open -O funcgraph-proc ls 这个执行之后就弹出一个框,说宿主机CPU巴拉巴拉,就把我机器卡死了。。。只能用网管重启大法。。。
    2019-04-12
  • 金波
    请教老师个问题,遇到一个问题是,嵌入式linux系统上,几秒钟之内某个进城突然导致OOM。
          请问有没有什么好的方法调查或者捕捉谁短时间占用大量内存吗? 脚本几秒检测maps试过,捕捉不到。内存钩子一是不线程安全,再就是应该用了tcmalloc,应该也不行。 valgrind太重量级,大程序跑不动。多谢

    作者回复: 动态追踪(比如bcc或者systemtap)应该是最好用的方法了。如果发送了OOM,从系统日志里面也可以找到线索

    2019-03-25
  • arron
    执行第二步报错:
    #echo function_graph > current_trace
    -bash: current_trace: Permission denied

    用root用户操作的,这是为何?

    作者回复: 试试留言中青石的方法可以吗

    2019-03-21
  • arron
    执行第二步是报错:
    #echo function_graph > current_trace
    -bash: current_trace: Permission denied

    root用户执行的,为何没权限,何解?

    作者回复: 试试留言中青石的方法可以吗

    2019-03-21
  • Chn.K
    老师,请教个问题,对于踩内存导致的coredump问题(从core文件大致能看出来内存已经乱了,但是看不出来是哪里把内存搞乱了),有没有好的定位方法?

    作者回复: coredump提供了问题的现场,从coredump分析(比如使用GDB)应该就是最好的方法了,

    2019-03-20
  • Linuxer
    楼上这位可以翻译分享吗?
    2019-03-20
  • 怀特
    这一节有些跟不上了。越来越深入内核了。

    作者回复: 这里有些工具也适用于用户态分析的

    2019-03-20
  • Linuxer
    老师,碰到一个问题怎么选择tracepoint和tracefunction呢?然后怎么结合输出分析问题呢?

    作者回复: 先要用其他工具定位出大概的位置,比如用perf或者bcc等等。有了函数之后,再回来跟踪函数的内部。

    2019-03-20
  • 全大神啊
    这个专栏很不错,学了很多干货,老师挺负责任的,希望老师以后多多开点专栏,分享新知识,开了记得通知😙

    作者回复: 谢谢支持😊

    2019-03-20
收起评论
21
返回
顶部