小编说:
今天为大家介绍一款实用工具——阿里开源内核诊断工具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/`; dofor tid in `ls /proc/$pid/task`; doecho pid: $pid, tid: $tidcat /proc/$pid/task/$tid/stackdone
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设计与实现》已上市!

谢宝友 著

本书作者从零开始完成的DIM-SUM操作系统,具备很多现代操作系统的先进特性,比如高效的内存管理、进程管理、虚拟文件系统、LEXT3文件系统等。更加难能可贵的是,他不但公开了源代码,还把自研DIM-SUM操作系统的设计心得和体会总结成册,给国内从事基础软件开发的技术人员提供了宝贵的一手资料。

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

  1. 阿里开源内核诊断工具:diagnose-tools

    小编说: 今天为大家介绍一款实用工具--阿里开源内核诊断工具diagnose-tools.diagnose-tools是由阿里巴巴开发的linux内核诊断工具,用于linux性能分析,特别是大规模集群 ...

  2. 阿里开源java调试_阿里开源java诊断工具Arthas

    快速安装 使用as.sh Arthas 支持在 Linux/Unix/Mac 等平台上一键安装,请复制以下内容,并粘贴到命令行中,敲 回车 执行即可: curl -L https://alibaba. ...

  3. 开源oracle同步图形工具,阿里开源数据同步工具--DataX

    阿里开源数据同步工具--DataX 是啥?: 是异构数据源离线同步工具 能干啥?: 能够将MySQL sqlServer Oracle Hive HBase  FTP 之间进行稳定高效的数据同步. 设 ...

  4. 阿里重磅开源在线分析诊断工具Arthas(阿尔萨斯)

    github地址: Arthas English version goes here. Arthas 是Alibaba开源的Java诊断工具,深受开发者喜爱. 当你遇到以下类似问题而束手无策时,Art ...

  5. 阿里开源混沌工程工具 ChaosBlade

    开发四年只会写业务代码,分布式高并发都不会还做程序员? >>>   近日,阿里开源了混沌工程工具 ChaosBlade.该项目是遵循混沌工程(Chaos Engineering)原理 ...

  6. Arthas - 开源 Java 诊断工具

    转载自  Arthas使用 Authas - 开源的java诊断工具 下载安装 authas是一个jar包,可以直接下载后运行 wget https://alibaba.github.io/artha ...

  7. 「技术工具」阿里开源Java在线诊断工具 Arthas 进阶教程

    Arthas 是Alibaba开源的Java诊断工具,深受开发者喜爱. 本教程会以一个普通的Spring Boot应用为例,演示Arthas命令的详细用法. Github: https://githu ...

  8. 微软开源AI诊断工具Error Analysis

    喜欢就关注我们吧! Error Analysis 使用机器学习技术,助数据科学家更好地了解模型错误模式. 在 2020 年 5 月的微软 Build 大会上,微软推出了三个响应式的 AI(Respon ...

  9. 六年打磨!阿里开源混沌工程工具 ChaosBlade

    阿里妹导读:减少故障的最好方法就是让故障经常性的发生.通过不断重复失败过程,持续提升系统的容错和弹性能力.今天,阿里巴巴把六年来在故障演练领域的创意和实践汇浓缩而成的工具进行开源,它就是 " ...

  10. 阿里开源的诊断神器(Arthas)自带IDEA插件真香!

    记得之前写过一篇Arthas使用教程 ,通过使用Arthas我们既可以实现线上调试,还可以实现热修复.最近逛了下Arthas的官网,发现它已经支持直接集成到SpringBoot应用中去,并且还出了专用 ...

最新文章

  1. java round number,Java Number Math 类
  2. 取得COM对象的UUID并以string输出
  3. sqlite3 select查询一列_一眼就会的sqlite3数据库
  4. 用Python进行屏幕截图,只用两行代码搞定
  5. 程序员书单_数据库篇
  6. 十个Java基础面试题(附答案)
  7. es中的xpack插件下载_ppt中插入flash动画工具-PowerPoint中插入Flash插件下载电脑版...
  8. install texlive-full on ubuntu
  9. 14. Controller
  10. mysql 字段_【MySql】mysql 字段个数的限制
  11. java里程碑之泛型--使用泛型
  12. 二、逻辑回归LR面试题总结
  13. Canvas Scaler
  14. Codeforces1457 C. Bouncing Ball(思维+dp)
  15. ocr---训练自己的数据实现文本检测(kears实现east网络)
  16. 基于知识图谱的知识泛化让AI学会“举一反三”
  17. HashMap 的底层原理
  18. 放大招了,肝了一篇8万字的Java8新特性总结,赶快收藏
  19. 昂达v80 plus linux,昂达(ONDA)V80 Plus平板电脑整体性能评测-ZOL中关村在线
  20. Unity3d如何实现四格漫画动态播放

热门文章

  1. 递增序列(迭代加深)
  2. create session 参数介绍
  3. maven学习记录一——maven介绍及入门
  4. 去除input框的值
  5. js的ctrl+s保存功能
  6. 如何优雅的编写Objective-C语言?
  7. Word 中插入 C/C++ 代码(转)
  8. 89c52串口发送接收小示例
  9. 如何用C#写一个简单的Login窗口
  10. Yum介绍与常见用法