简介:本文从大量的性能诊断实践出发,来介绍 SysAK 在性能诊断上的方法论及相关工具。

文/张毅:系统运维SIG核心成员、SysAK 项目负责人;毛文安:系统运维 SIG 负责人。

系统运维既要业务稳定的运行,又要最大化的利用资源,因此对于应用性能的评估也是重要的一环,作为系统运维的利器,SysAK 自然少不了这方面的能力。但对于应用性能的诊断,有时比稳定性问题更难,非专业人员甚至有无从下手的感觉。本文从大量的性能诊断实践出发,来介绍 SysAK 在性能诊断上的方法论及相关工具。

SysAK 应用性能诊断方法

简而言之,SysAK 诊断应用性能的基本思路就是自顶向下并进行关联拓展。

自上向下即应用->OS->硬件,关联拓展则包括同级应用、系统影响、以及网络拓扑。说起来简单,但实施起来却是一个大工程。

1、应用画像

首先做的就是应用画像,要对应用的性能进行诊断,首先要对其进行画像,包括其业务吞吐、系统资源使用等,然后再根据画像中占比比较大的性能瓶颈进行逐一专项分析。具体来说,包括应用的并发数、运行和睡眠的统计。 并发数简单,统计业务任务数就行了,这个主要是为后面的资源使用作为参考。

1.1、运行统计

即对系统基础资源的利用进行分类统计,应用运行时基础资源占用就4类:

Cpu

通过 cpu 占用可知应用本身的吞吐是否高,并进一步通过 user/sys 的 cpu 占比可得知业务运行时更多的是在业务自身还是在内核资源的使用上。所以此处至少要包含运行时长、以及 user、sys 的各自比例。如果 sys 占比高,需要继续分析对应内核资源是否有异常情况,否则更多时候需要分析硬件资源上是否有瓶颈。

内存

通过内存的使用情况来判断内存的申请与访问是否是制约业务性能的因素。所以此处至少要包含内存分配总量、频率、缺页次数、跨 NUMA 节点访问次数和大小等的统计。

文件

通过文件访问的情况来判断文件 IO 是否是制约业务性能的因素。此处至少要包含文件读写频率、pagecache 命中率、平均 IO 时延等的统计。

网络

通过报文流量来判断网络是否是制约业务性能的因素,此处至少要包含流量统计、对端链接的网络拓扑等。

1.2、睡眠统计

如果应用运行周期内,睡眠时间占比很大,则很可能是影响业务性能的关键因素,此时就要分析睡眠的详细情况了。至少要包含三类行为的数据统计,包括具体行为的次数和时长:

主动睡眠:这类数据如果占比过高,则说明是应用自身行为。 用户临界资源竞争:这些数据如果占比过高,则需要优化应用。 内核资源等待:这类数据如果占比过高,则需要分析具体的系统内核资源瓶颈。 在有了应用画像以后,我们就对应用运行过程中的基本情况有了了解,如果发现瓶颈不在业务自身,那么就需要继续往下分析对应的系统资源或者硬件瓶颈了。

2、系统内核资源

系统内核资源制约应用性能的地方又可分为三大类:

2.1、干扰

一个服务器操作系统运行过程中,对应用运行的干扰源可能会很多,但干扰不一定会对业务造成影响,所以至少需要包含这些干扰源的频率和运行时间,来评估是否是关键因素。

至少需要包括以下干扰源的统计:

设备硬件中断

如果在业务运行过程中,某一类中断频率过高或者集中到某个 cpu,或者单次单次运行过过长,那么都都可能会影响到业务的性能,可以对中断进行打散绑定等操作观察效果。

系统定时中断

系统定时器过多,也可能会对业务的唤醒造成延迟,通常可以分析业务进程是否有大量的使用高精度定时器。

软中断

可能是网络流量是否有突发增加等。

内核线程

其他高优先级应用

2.2、瓶颈

系统内核资源种类繁多,应用模型不同,对内核资源的依赖也不同,所有瓶颈点无法完全覆盖,但至少需要包含几大类常见的内核资源的统计数据:

运行队列长度

这个可以表明是否业务进程/线程并发过多,或者是否绑核不合理等

fs/block 层时延

对于不同的文件系统或设备、IO 调度算法,可能会有不同的瓶颈点,通常需要进行分段统计时延来确定

内存分配延时

受内存水位、碎片的影响,内存分配的时延有时可能会很大

pagefault 时长与频率

内存缺页导致的内存请求、重映射、tlb flush 等对的开销是非常大的,如果频繁的进入到 pagefault 流程中,可以考虑从应用策略上进行优化,比如预分配内存池、使用大页等。

关键路径 kernel 锁的竞争

锁是不可避免的机制,kernel 态锁竞争通常会导致 sys 态的 cpu 升高,需要结合上下文进行具体分析。

2.3、策略

上述提到内核资源无法完全覆盖,但可以有另外一种方法去能观测一些数据,因为不同的内核策略可能有比较大的性能差异,所以可以尝试通过不同系统间的对比,找出配置的差异点。通常的系统配置采集如下:

内核启动参数

内核配置接口 sysctl/procfs/sysfs

内核模块差异

cgroup配置

3、虚拟化

当上述找不到瓶颈点时,或者我们想继续挖掘性能的剩余价值,通常就会到硬件这一侧,而目前业务部署在云上居多,所以在深入硬件层前,虚拟化层或者说主机侧也是绕不开的必要因素。对主机侧的性能分析,针对系统内核资源制约可以复用上述的方法,但对业务画像可以少做不少事,相对于应用业务,虚拟化这层的逻辑不会无限变化,我们可以从各个渠道了解到云厂商提供的虚拟化方案,目前主流的是 Linux kvm 方案。因此可以针对性的对 kvm 这个方案所所及到的技术点做特别分析。此处应该包含的统计包括:

qemu 线程的被抢占频率及时间、guest陷出频率及事件、qemu线程在host上运行的时间

通过这些来综合判断是否是由于虚拟化层带来的性能损失或者是否有改善的可能性。

4、硬件性能

最后,真正到了硬件层,到这里通常都是由于单纯从应用层或者系统层无法找到更多的优化空间了。其实又有两种思路,一种是看看硬件利用率的点,看能否反向调整应用,对硬件使用的热点减少依赖或者分散利用;另一种就是应用无法调整了,评估硬件的性能是否真正已到瓶颈。对于前者,又可以延伸出一套方法论来,比如 Ahmed Yasin 的TMAM,在 sysAK 中不做过多延伸,但仍然有必要的工作要做,除 cache、tlb miss、cpi 这些数据采集外,更关键的是怎么将这些数据结合应用进程的运行情况进行分析,比如同一 cpu 上的 cache 或带宽竞争多,是由于当前业务自身的程序设计,还是有其他进程存在争抢导致,对于争抢导致的可以通过绑核、rdt 等技术进行配合优化。

5、交互的应用环境

还没完,这里还少了一个拼图,现在绝大多数应用都不是单机的,交互的应用之间也会产生性能影响,因此在应用画像中,我们曾提到过网络连接的拓扑,就是用于此。我们可以将上述所有的性能诊断方法在和当前应用进行交互的对象上复制一遍。

总结

最后的最后,以一张大图来进行总结。

而图中涉及的工具将会在后续的实战篇中出现,敬请期待。

原文链接

本文为阿里云原创内容,未经允许不得转载。

龙蜥利器:系统运维工具 SysAK的云上应用性能诊断 | 龙蜥技术的更多相关文章

  1. linux 系统运维工具13款

    1. 查看进程占用带宽情况 - Nethogs Nethogs 是一个终端下的网络流量监控工具可以直观的显示每个进程占用的带宽. 下载:http://sourceforge.net/projects/ ...

  2. 【原】linux系统运维工具必备

    操作系统:CentOS※,Ubuntu 网站服务:apache,nginx※,tomcat,tengine 开发语言:php,python※,shell※ 数据库 :Mysql※ 代理相关:lvs,k ...

  3. 【运维工具】Git代码发布系统

    引言 代码发布系统是互联网公司必备的运维系统,作用主要用户发布业务代码 到 业务服务器 为什么需要代码发布系统 有的同学可能说,我们公司服务器就那么一台,做个发布系统太麻烦了? 不认同这说法 发布系统 ...

  4. 自动化运维工具SaltStack详细部署

    ==========================================================================================一.基础介绍==== ...

  5. 自动化运维工具SaltStack详细部署【转】

    ==========================================================================================一.基础介绍==== ...

  6. CheungSSH国产自动化运维工具开源Web界面

    CheungSSH web2.0 发布文档 CheungSSH 简介 CheungSSH是一款国人自主研发的Linux运维自动化管理服务器软件,秉着为企业降低运营成本,解放管理员双手和自动化生产的理念 ...

  7. 自动化运维工具Ansible详细部署 (转载)

    自动化运维工具Ansible详细部署 标签:ansible 原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://sofar.blog. ...

  8. Python自动化运维工具fabric的安装

    使用shell命令进行复杂的运维时,代码往往变得复杂难懂,而使用python脚本语言来编写运维程序,就相当于开发普通的应用一样,所以维护和扩展都比较简单,更重要的是python运维工具fabric能自 ...

  9. distri.lua的web运维工具

    我的新手游项目很快就要进入到寻找发行商的环节,最近几天相对较空闲,逐将工作重心转移到服务器组运维工具的制作上. 回想一年之前经历的那个不算成功的端游项目,因为运维工具设计得不合理,使用十分不方便,游戏 ...

  10. 自动化运维工具之 Ansible 介绍及安装使用

    一.初识Ansible 介绍: Absible 使用 模块(Modules)来定义配置任务.模块可以用标准脚本语言(Python,Bash,Ruby,等等)编写,这是一个很好的做法,使每个模块幂等.A ...

随机推荐

  1. 新服务器搭建docker跑mysql+java项目

    参考:https://js.work/posts/1362ba443b35d(yum安装java17) 踩了两个坑,一个前面的conf文件里监听80的配置没有删除掉,一个项目配置里面的路径还在用服务器 ...

  2. leetcode数据库sql之Delete Duplicate Emails

    leetcode原文引用: Write a SQL query to delete all duplicate email entries in a table named Person, keepi ...

  3. 菜鸟角度简单分析BP算法(Error Back Propagation)

    PS:要转载请注明出处,本人版权所有. PS: 这个只是基于<我自己>的理解, 如果和你的原则及想法相冲突,请谅解,勿喷. 前置说明   本文作为本人csdn blog的主站的备份.(Bl ...

  4. find第二天

    find第二天 1.找出/tmp目录下,属主不是root,且文件名不以f开头的文件 find /tmp ! -user root -a ! -name 'f*' 或者 find /tmp ! -use ...

  5. 【VR虚拟现实】-医疗行业的具体应用

    虚拟现实 (VR) 虽然经常与游戏联系在一起,但不可否认,未来科技少不了虚拟现实,其应用可以彻底改变许多行业.在医疗领域,无数人正在探索 VR 可以帮助患者和医疗从业者实现更好的治疗结果治疗方式,比如 ...

  6. Python利用pandas拆分大型的csv文件

    当将大型CSV文件拆分成较小的文件时,您可以使用Python的Pandas库来处理 导入必要的库 import pandas as pd 定义拆分函数 当定义拆分函数时,我们将在以下步骤中处理CSV文 ...

  7. 这里有你不得不了解的Java 11版本特性说明

    「MoreThanJava」 宣扬的是 「学习,不止 CODE」,本系列 Java 基础教程是自己在结合各方面的知识之后,对 Java 基础的一个总回顾,旨在 「帮助新朋友快速高质量的学习」. 当然 ...

  8. IDEA代码缩略图插件CodeGlance

    打开IDEA设置Settings,选择Plugins,搜索CodeGlance. 点击Install,安装完成后重启即可. 效果如下:

  9. 微服务集成Spring Cloud Alibaba Seata (二) 客户端连接

    通过上篇文章后我们的Seata服务就部署成功了,如果还不清楚怎么部署或者还没有部署Seata服务的朋友可以看我写的上篇文章进行服务部署.Seata部署步骤:https://www.cnblogs.co ...

  10. #单调栈#CodeChef Meteor

    METEORAK 分析 设 \(dp[l][r]\) 表示第 \(l\) 到 \(r\) 行的答案,可以发现它由 \(f[l][r],dp[l][r+1],dp[l+1][r]\) 转移而来. 关键就 ...