您当前的位置:首页 > 电脑百科 > 程序开发 > 编程百科

你需要的阿里开源内核诊断工具:diagnose-tools

时间:2020-11-03 10:15:50  来源:  作者:

小编说:

今天为大家介绍一款实用工具——阿里开源内核诊断工具diagnose-tools。diagnose-tools是由阿里巴巴开发的linux内核诊断工具,用于linux性能分析,特别是大规模集群系统中的抖动问题分析。

diagnose-tools工具是阿里工程师谢宝友在过去一年多时间开发的,代码行数超过 5万行。同时,他也是《深入理解并行编程》、《自研操作系统:DIM-SUM设计与实现》的作者。

 

1. 引言

 

作为一名Linux工程师,难免会遇到系统宕机、夯机、性能抖动等问题。在夯机时,常见的做法是编写一个简单的脚本去遍历系统中所在线程的堆栈。例如:

#!/bin/sh
#****************************************************************#
# ScriptName: load.sh
# Author: baoyou.xie@aliyun.com
# Create Date: 2020-08-13 19:32
# Modify Author: @alibaba-inc.com
# Modify Date: 2020-08-13 19:32
# Function:
#***************************************************************#

for pid in `ls /proc/`; do
    for tid in `ls /proc/$pid/task`; do
        echo pid: $pid, tid: $tid
        cat /proc/$pid/task/$tid/stack
    done
done

 

只要找到进程的调用链,有经验的工程师会很快知道引起系统卡顿的原因。换句话说,类似问题比较容易解决。

确实,在单机中,解决这些问题的方法很多,看起来也很简单。但是,这样的脚本可能存在如下问题:

1. 在生产环境中,一台100个CPU的服务器,往往有数万甚至数十万个线程,运行这样的脚本要花费一分钟时间。

2. 如果在上千台机器中部署这样的脚本,必然会引起生产故障。

3. 这样的脚本只能找到线程在内核中的堆栈。如果应用程序运行在用户态,就没有办法知道这些应用程序到底在做什么,为何引起系统卡顿。

 

2. 难题

 

互联网一线工程师最头疼的难题是“集群内RT偶发抖动”,以及系统卡顿

其中,RT抖动问题最大的难点在于:

  • 上千台机器中出现异常的机器随机。
  • 异常发生的时间随机。
  • 故障持续时间也只有几秒钟。

常规的单机诊断手段有以下不足:

  • 占用超过1%的CPU。
  • 部署复杂,可能需要安装Python/systemtap等工具。
  • 消耗内存和存储资源。

可以说,集群范围内的RT偶发抖动是一个业界难题,被全世界的运维工程师所讨厌。

在日常业务稳定性分析的过程中,作者用内核模块实现了一些小工具,并将这些小工具集成到diagnose-tools中。为了将工具方便应用到线上生产环境,作者特意使用Linux内核模块实现了diagnose-tools工具。

这些小工具解决了不少线上的稳定性问题。特别是在2019年“双11”压测中,发挥了重要作用,为2019年最稳的“双11”贡献了力量。

 

3. 用途

 ◆ load-monitor

在系统卡顿的时候,往往伴随着系统Load指标升高。这可以通过top/uptime等命令看到当前系统的Load指标。一旦发现系统Load升高,就可以使用load-monitor子功能找到当前系统中处于D状态和R状态的进程。这些状态的进程与系统Load指标息息相关。diagnose-tools工具不但能找到这些进程的名称,还能打印出进程的内核态堆栈/用户态堆栈/进程组/CGROUP组等信息。最重要的是,工具还可以为此生成火焰图,这样就可以一目了然地找到问题原因。

当然了,你可以运行如下命令来看看工具的效果:

sh /usr/diagnose-tools/test.sh load-monitor

 ◆ sys-delay

在服务器Linux中,随着系统负载的增加,会暴露出Linux内核中不少有隐患的代码。例如:过长的循环、锁竞争、不合理的流程。这些代码会导致系统调用变慢,从而引起卡顿。sys-delay功能是找到这些异常代码的好工具。

sys-delay功能的实现原理,是在应用程序进入系统调用的地方,挂接一个trace-point钩子,记录下进入时间,在退出系统调用的时候结束监控。并且启动一个定时器,监控执行时间过长的调用链。

这个功能找到不少异常流程,相关的工程师制作了热补丁,提升了阿里混部系统的平滑度。

 ◆ run-trace

run-trace功能是解决应用程序RT抖动的利器。为至少10个业务方解决了2019年“双11”压测过程中的问题。可以略微夸张一点地讲,这个功能为2019年最稳的“双11”发挥了不小的作用,这也间接促进了2019 年“双11”成功获得国家科技进步奖。

run-trace功能的原理是在计算RT开始和结束的地方,挂接钩子,系统记录下在此期间应用程序的所有行为。可以针对应用程序进行微秒级的采样,得到应用程序的用户态调用链,找到应用程序异常期间的所有异常事件。

 ◆ perf

与开源社区大名鼎鼎的perf工具相比,diangose-tools工具的perf功能不算强大,但是很有特色。特别是在运行数十个容器的宿主机中,使用此工具可以针对部分CPU进行采样,并且完整输出进程用户态/内核态调用链,这些特色是开源perf工具所没有的。此功能也协助分析了不少线上生产环境中的问题。

 ◆ 其他功能

除了这些功能外,diagnose-tools工具还有20多个小功能。包括网络、I/O相关的诊断工具。限于篇幅,作者并不能在此详细列出所有功能的介绍。有兴趣的读者可以:

1.参考源码目录 /documents/usage.docx里的详细介绍。

2.参考源码目录SOURCE/script/test.sh,试着使用每个功能并观察其结果。

3.添加linux-kernel微信号与作者联系。

 

4. 效果

 

通过工具,我们最终在线上生产环境中,发现了不少内存回收、系统堆叠、不合理的监控工具引起的问题。

同时根据工具的诊断结果,产生了19个内核优化补丁,同时也调整线上生产系统的Linux配置参数。

最终实现的效果是:将混部机房的Load高告警数量降低了67%,节省了数千台物理机。同时也将阿里云存储抖动告警降低了50倍。

 

5. 特点

 

要达到这样的效果,主要在于工具轻量化的特点。这是本工具优于脚本/ebpf/systemtap的地方。它的性能开销小到何种地步呢?举个例子,在10G网络吞吐量的情况下,对每个报文进行监控,仅仅占用3%的CPU。

正是由于轻量化的特点,才可以将工具常态化运行在集群中,抓住异常信息。最终实现秒级系统资源监控,突破了一个业界技术难题。

 

6. 适用范围

 

除了轻量化的特点外,diagnose-tools工具的适用面也比较广,不仅可以用于阿里生产环境的操作系统,也可以用于标准linux 2.6 / 3.x / 4.x / 5.x版本。当然了,还可以用于常见的Linux发行版,例如ubuntu/centos/debian,甚至也有公有云客户将它用于定制linux中。

diagnose-tools还可以获取用户态应用程序的调用链,而不管这些应用程序是用JAVA / C / C++ 还是Go语言开发。甚至,作者希望业界同人对工具进行改造,以支持python等其他开发语言编写的应用程序。

在实践中,也可以基于diagnose-tools进行二次开发,与业务调度程序配合,完成更复杂的功能。实际上,已经有业务方在这样使用diagnose-tools工具了。

 

7. 现状

 

diagnose-tools工具已经被一些公有云客户、友商、开源爱好者使用,并且帮助解决了不少Linux性能问题,特别是抖动问题。

目前,diagnose-tools工具已经开放源码。更详细的信息,请大家参考:

https://github.com/alibaba/diagnose-tools

有一些热情的开源爱好者已经为diagnose-tools提供了patch,这些patch已经被合入到工具中,并且被作者用于线上生产系统的问题诊断中。

欢迎更多的开源爱好者参与到diagnose-tools工具的开发中来!

 

本文作者新书《自研操作系统:DIM-SUM设计与实现》已上市!



Tags:内核诊断   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,如有任何标注错误或版权侵犯请与我们联系(Email:2595517585@qq.com),我们将及时更正、删除,谢谢。
▌相关推荐
今天为大家介绍一款实用工具——阿里开源内核诊断工具diagnose-tools。diagnose-tools是由阿里巴巴开发的linux内核诊断工具,用于linux性能分析,特别是大规模集群系统中的抖动问题分析。...【详细内容】
2020-11-03  Tags: 内核诊断  点击:(269)  评论:(0)  加入收藏
▌简易百科推荐
摘 要 (OF作品展示)OF之前介绍了用python实现数据可视化、数据分析及一些小项目,但基本都是后端的知识。想要做一个好看的可视化大屏,我们还要学一些前端的知识(vue),网上有很多比...【详细内容】
2021-12-27  项目与数据管理    Tags:Vue   点击:(1)  评论:(0)  加入收藏
程序是如何被执行的  程序是如何被执行的?许多开发者可能也没法回答这个问题,大多数人更注重的是如何编写程序,却不会太注意编写好的程序是如何被运行,这并不是一个好...【详细内容】
2021-12-23  IT学习日记    Tags:程序   点击:(9)  评论:(0)  加入收藏
阅读收获✔️1. 了解单点登录实现原理✔️2. 掌握快速使用xxl-sso接入单点登录功能一、早期的多系统登录解决方案 单系统登录解决方案的核心是cookie,cookie携带会话id在浏览器...【详细内容】
2021-12-23  程序yuan    Tags:单点登录(   点击:(8)  评论:(0)  加入收藏
下载Eclipse RCP IDE如果你电脑上还没有安装Eclipse,那么请到这里下载对应版本的软件进行安装。具体的安装步骤就不在这赘述了。创建第一个标准Eclipse RCP应用(总共分为六步)1...【详细内容】
2021-12-22  阿福ChrisYuan    Tags:RCP应用   点击:(7)  评论:(0)  加入收藏
今天想简单聊一聊 Token 的 Value Capture,就是币的价值问题。首先说明啊,这个话题包含的内容非常之光,Token 的经济学设计也可以包含诸多问题,所以几乎不可能把这个问题说的清...【详细内容】
2021-12-21  唐少华TSH    Tags:Token   点击:(9)  评论:(0)  加入收藏
实现效果:假如有10条数据,分组展示,默认在当前页面展示4个,点击换一批,从第5个开始继续展示,到最后一组,再重新返回到第一组 data() { return { qList: [], //处理后...【详细内容】
2021-12-17  Mason程    Tags:VUE   点击:(14)  评论:(0)  加入收藏
什么是性能调优?(what) 为什么需要性能调优?(why) 什么时候需要性能调优?(when) 什么地方需要性能调优?(where) 什么时候来进行性能调优?(who) 怎么样进行性能调优?(How) 硬件配...【详细内容】
2021-12-16  软件测试小p    Tags:性能调优   点击:(19)  评论:(0)  加入收藏
Tasker 是一款适用于 Android 设备的高级自动化应用,它可以通过脚本让重复性的操作自动运行,提高效率。 不知道从哪里听说的抖音 app 会导致 OLED 屏幕烧屏。于是就现学现卖,自...【详细内容】
2021-12-15  ITBang    Tags:抖音防烧屏   点击:(23)  评论:(0)  加入收藏
11 月 23 日,Rust Moderation Team(审核团队)在 GitHub 上发布了辞职公告,即刻生效。根据公告,审核团队集体辞职是为了抗议 Rust 核心团队(Core team)在执行社区行为准则和标准上...【详细内容】
2021-12-15  InfoQ    Tags:Rust   点击:(24)  评论:(0)  加入收藏
一个项目的大部分API,测试用例在参数和参数值等信息会有很多相似的地方。我们可以复制API,复制用例来快速生成,然后做细微调整既可以满足我们的测试需求1.复制API:在菜单发布单...【详细内容】
2021-12-14  AutoMeter    Tags:AutoMeter   点击:(20)  评论:(0)  加入收藏
相关文章
    无相关信息
最新更新
栏目热门
栏目头条