更新时间:2022-01-10 GMT+08:00
分享

介绍

鲲鹏开发套件是Visual Studio Code的一款扩展工具,通常将此类工具称作集成开发环境(IDE)插件。

鲲鹏性能分析插件是其中一个子工具,作为客户端调用服务端的功能。

鲲鹏性能分析工具由四个子工具组成,分别为:系统性能分析Java性能分析、系统诊断调优助手

系统性能分析是针对基于鲲鹏的服务器的性能分析工具,能收集服务器的处理器硬件、操作系统、进程/线程、函数等各层次的性能数据,分析系统性能指标,定位到系统瓶颈点及热点函数,并给出优化建议。该工具可以辅助用户快速定位和处理软件性能问题。

Java性能分析是针对基于鲲鹏的服务器上运行的Java程序的性能分析和优化工具,能图形化显示Java程序的堆、线程、锁、垃圾回收等信息,收集热点函数、定位程序瓶颈点,帮助用户采取针对性优化。

系统诊断是针对基于鲲鹏的服务器的性能分析工具,提供内存泄漏诊断(包括内存未释放和异常释放)、内存越界诊断、内存消耗信息分析展示、OOM诊断能力,帮助用户识别出源代码中内存使用的问题点,提升程序的可靠性;压测网络,获得网络最大能力,为网络IO性能优化提供基础参考数据;诊断网络,定位网络疑难问题,解决因网络配置和异常而导致的网络IO性能问题;压测存储IO,获得存储设备最大能力,包括:吞吐量、IOPS、时延等,并以此评估存储能力,为存储IO性能优化提供基础参考数据。

调优助手是针对基于鲲鹏的服务器的调优工具,能系统化组织性能指标,引导用户分析性能瓶颈,实现快速调优。

当前工具支持的功能特性如表1所示。

表1 工具支持的功能特性

工具分类

任务分类

描述

系统性能分析

联动分析

支持对同一种类型分析任务的结果,选择同一节点或者不同节点间进行比较,从而快速获得不同分析结构之间的差别,定位性能指标的变化,快速识别优化手段的效果。

HPC分析

HPC分析通过采集系统的PMU事件并配合采集面向OpenMP和MPI应用的关键指标,从而帮助用户精准获得Parallel region及Barrier-to-Barrier的串行及并行时间,校准的2层微架构指标,指令分布及L3的利用率和内存带宽等信息。

全景分析

通过采集系统软硬件配置信息,以及系统CPU、内存、存储IO、网络IO资源的运行情况,获得对应的使用率、饱和度、错误次数等指标,以此识别系统性能瓶颈。针对部分系统指标项,根据当前已有的基准值和优化经验提供优化建议。

针对大数据场景、数据库场景和分布式存储场景的硬件配置、系统配置和组件配置进行检查并显示不是最优的配置项,同时分析给出典型硬件配置及软件版本信息。

微架构分析

基于ARM PMU(Performance Monitor Unit)事件,获得指令在CPU流水线上的运行情况,可以帮助用户快速定位当前应用在CPU上的性能瓶颈,用户可以有针对性地修改自己的程序,以充分利用当前的硬件资源。

访存分析

基于CPU访问缓存和内存的事件,分析访存过程中可能的性能瓶颈,给出造成这些性能问题的可能原因及优化建议。
  1. 访存统计分析

    基于处理器访问缓存和内存的PMU事件,分析存储的访问次数、命中率、带宽等情况,具体包括:

    • 分析L1C、L2C、L3C、TLB的访问命中率和带宽。
    • 分析HHA访问速率。
    • 分析DDR的访问带宽和次数。
  2. Miss事件分析

    基于ARM SPE(Statistical Profiling Extension)能力实现。SPE针对指令进行采样,同时记录一些触发事件的信息,包括精确的PC指针信息。利用SPE能力可以用于业务进行LLC Miss,TLB Miss,Remote Access,Long Latency Load等Miss类事件分析,并精确的关联到造成该事件的代码。基于这些信息,用户便可以有针对性地修改自己的程序,降低发生对应事件发生的几率,提高程序处理性能。

  3. 伪共享分析

    基于ARM SPE(Statistical Profiling Extension)能力实现。SPE针对指令进行采样,同时记录一些触发事件的信息,包括精确的PC指针信息。利用SPE能力可以用于业务进行伪共享分析,得到发生伪共享的次数和比例、指令地址和代码行号、NUMA节点等信息。基于这些信息,用户便可以有针对性地修改自己的程序,降低发生伪共享的几率,提高程序处理性能。

I/O分析

分析存储IO性能。以存储块设备为分析对象,分析得出块设备的I/O操作次数、I/O数据大小、I/O队列深度、I/O操作时延等性能数据,并关联到造成这些I/O性能数据的具体I/O操作事件、进程/线程、调用栈、应用层I/O APIs等信息。根据I/O性能数据分析给出进一步优化建议。

进程/线程性能分析

采集进程/线程对CPU、内存、存储IO等资源的消耗情况,获得对应的使用率、饱和度、错误次数等指标,以此识别进程/线程性能瓶颈。针对部分指标项,根据当前已有的基准值和优化经验提供优化建议。针对单个进程,还支持分析它的系统调用情况。

资源调度分析

基于CPU调度事件分析系统资源调度情况,主要包括:

  1. 分析CPU核在各个时间点的运行状态,如:Idle、Running,以及各种状态的时长比例。
  2. 分析进程/线程在各个时间点的运行状态,如:Wait、Schedule和Running,以及各种状态的时长比例。
  3. 分析进程/线程切换情况,包括:切换次数、平均调度延迟时间、最小调度延迟时间和最大延迟时间点。
  4. 分析各个进程/线程在不同NUMA节点之间的切换次数。如果切换次数大于基准值,能给出绑核优化建议。

热点函数分析

分析C/C++程序代码,找出性能瓶颈点,获得对应的热点函数及其源码和汇编指令;支持通过火焰图展示函数的调用关系,给出优化路径。

锁与等待分析

分析glibc和开源软件(如MySQL、Open MP)的锁与等待函数(包括sleep、usleep、mutex、cond、spinlock、rwlock、semaphore等),关联到其归属的进程和调用点,并根据当前已有的优化经验给出优化建议。

Java性能分析

在线分析

在线分析包含对于目标JVM和Java程序的双重分析。包括Java虚拟机的内部状态如Heap,GC活动,线程状态及上层Java程序的性能分析,如调用链分析,热点函数,锁分析,程序线程状态及对象生成分布等。通过Agent的方式在线获取JVM运行数据,进行精确分析。

主要分析结果包含:

  1. 概览
    • 在线显示Java虚拟机系统状态。
    • 在线显示JVM的Heap大小、GC活动、Thread数量、Class加载数量和CPU使用率。
  2. 内存信息
    • 通过抓取堆快照,分析应用在某时刻堆的直方图分布和支配调用关系,追溯堆内存中各Java存活对象到GC root的引用关系链,帮助定位潜在的内存问题;对比分析不同时刻的堆快照,给出堆使用与分配变化,辅助用户发现堆内存在分配和使用过程中的异常情况。
    • 获取Java堆中各个对象创建的数量及大小,显示相关内存使用情况并实时刷新。
  3. GC

    通过采集GC事件的各项指标,分析GC性能问题。

  4. IO信息

    在线分析应用中的文件IO、Socket IO时延、消耗带宽等数据,找出热点IO操作。

  5. 线程信息

    获取当前JVM中实时的活动线程状态和当前线程转储,图形化显示线程锁定状态,分析线程死锁情况。

  6. 数据库信息
    • 监控和分析数据库连接池。监控数据库连接池连接的情况、帮助用户定位潜在的连接泄露,对不合适的连接池配置给出优化建议。
    • 分析JDBC热点SQL操作。记录应用中的SQL调用时间、耗时和堆栈跟踪,帮助用户定位耗时最长的热点SQL操作。
    • 分析NoSQL热点操作。记录应用中访问/操作NoSQL数据库调用时间、耗时和堆栈跟踪,帮助用户定位耗时最长的热点NoSQL操作。
  7. HTTP信息

    记录应用中的HTTP请求时间和耗时,找出热点HTTP请求。

  8. SpringBoot信息

    经用户授权后,采集第三方框架,如Spring Boot Acutator,提供指标数据与性能数据,更加贴近用户业务。

  9. 快照信息

    支持在堆、IO、Workload在线分析过程中生成快照,对快照进行比对,辅助用户发现资源、业务相关指标的变化趋势,定位潜在的资源泄露问题或性能指标恶化问题。

采样分析

通过采样的方式,收集JVM的内部活动/性能事件,通过录制及回放的方式来进行离线分析。这种方式对系统的额外开销很小,对业务影响不大,适用于大型的Java程序。

主要分析结果包括:

  1. 概览
    • 显示Java虚拟机系统状态。
    • 通过采样及回放的方式显示JVM的Heap使用情况、GC活动、IO消耗和CPU使用率。
  2. 线程转储及锁分析结果
    • 分析程序线程状态及锁。获取采样时间内的线程的状态变化和当前线程转储,根据线程转储图形化地显示线程锁定状态,分析线程死锁情况。
    • 分析程序所用堆积对象。获取采样时间内Java堆中各个对象的数量、大小与堆栈跟踪。
    • 分析估计线程阻塞对象和阻塞时间。
  3. 方法采样分析结果
    • 分析Java及native代码中热点函数CPU Cycles的占比及定位。
    • 支持通过火焰图查看热点函数及其调用栈。
  4. 内存分析结果
    • 通过对存留周期长的对象进行采样,分析Java应用中潜在的堆内存泄漏,并辅助用户定位潜在原因。
    • 根据采样分析记录出具关于启动参数、GC方面的报告和优化建议。
  5. IO分析结果

分析应用中文件IO、Socket IO时延、消耗带宽,找出热点IO操作。

系统诊断

内存泄漏诊断

分析应用程序存在的内存泄漏点(包括内存未释放和异常释放),得出具体的泄漏信息,并支持关联出调用栈信息和源码。

内存消耗分析

实时跟踪应用程序运行期间系统层、应用层(调用内存申请函数)、分配器层、内存映像层的内存消耗情况。

内存越界诊断

分析应用程序的内存异常访问点,给出异常访问类型和内存访问信息,并支持关联出调用栈和源码。

OOM诊断

分析发生OOM时的进程内存状态、系统内存状态和调用栈信息。

连通性拨测

利用系统的ping和traceroute命令诊断源主机与目标主机之间的网络是否连通,经过的网络路径,及数据包往返时间(网络时延,Round-trip delay time)。

TCP/UDP拨测

利用开源软件iperf3作为Test APP模拟建立TCP、UDP连接,进行收发包测试。

网络抓包

网络抓包采用内核的数据包过滤器实现。数据包过滤器接收网卡驱动程序拷贝的数据,经过过滤后发送到用户态。

丢包诊断

通过ethtool、netstat等系统工具统计整个协议栈中的丢包情况,确定丢包点,给出解决方案;通过perf跟踪skb:kfree_skb事件,监控丢弃的数据包及其内核调用栈,确定丢包根因。

系统负载监控

监控诊断期间的系统负载,包括:CPU、内存、网络IO、软硬件中断,以此了解在网络拨测或发生网络丢包时,是否存在系统资源不足。

存储IO诊断

压测存储IO,获得存储设备最大能力,包括:吞吐量、IOPS、时延等,并以此评估存储能力,为存储IO性能优化提供基础参考数据。

调优助手

调优分析

调优助手通过系统化组织和分析性能指标、热点函数、系统配置等信息,形成系统资源消耗链条,引导用户根据优化路径分析性能瓶颈,并针对每条优化路径给出优化建议和操作指导,以此实现快速调优。

分享:

    相关文档

    相关产品

close