
# 通过Profiler对代码性能进行分析
Profiler性能分析，自动获取应用程序运行过程中CPU、内存及时延的使用情况，通过火焰图实时展示每一个方法、类、线程和包的调用关系和执行效率，帮助优化代码性能。
#### 性能分析
1. 登录[APM控制台](https://auth.huaweicloud.com/authui/login.html?service=https://console.huaweicloud.com/console/#/login)。
2. 单击左侧![](https://support.huaweicloud.com/usermanual-apm2/zh-cn_image_0000002518176348.png)，选择"管理与监管 \> 应用性能管理 APM"，进入APM服务页面。
3. 在左侧导航栏选择"应用监控 \> 指标"。
4. 在界面左侧树单击待查看Profiler性能分析环境后的![](https://support.huaweicloud.com/usermanual-apm2/zh-cn_image_0000002549816115.png)。
5. 单击"Profiler性能分析"，切换至Profiler性能分析页签。
6. 单击"性能分析"，进入性能分析页面。
7. 在Profiler页签选择您想要查看的实例、性能分析类型、范围以及聚合维度，可以查看该实例对应的性能分析数据。 
   图1性能分析   
   ![](https://support.huaweicloud.com/usermanual-apm2/zh-cn_image_0000002549816119.png "点击放大")
   - 选择实例：在下拉列表中选择实例，当前最多可以同时选择2个实例。
   
   - 选择类型：在下拉菜单中，选择类型。当前支持CPU Time、Allocated Memory、Latency以及Live Object Memory四种类型。
   
   - 选择范围：在下拉菜单中，选择范围。当前支持My Code以及All Code两种范围。
   
   - 选择聚合维度：在下拉菜单中，选择聚合维度。当前支持Line、Method、Class以及Package四种方式。
     表1性能分析参数说明 
     | 选择项  | 参数                 | 说明                                                          |
     |:---|:---|:---|
     | 类型   | CPU Time           | 每个方法在CPU上的运行时间。                                             |
     | 类型   | Allocated Memory   | 已分配的堆内存（包括已被回收和未被回收的部分），使用场景包括频繁GC等。                        |
     | 类型   | Live Object Memory | 已分配但未被回收的堆内存，使用场景主要包括内存泄漏等。该特性需要JDK版本为JDK17及以上版本。           |
     | 类型   | Latency            | trace相关线程的方法执行的总耗时。包括方法在CPU上的运行时间、等待I/O的时间以及方法运行时发生的任何其他时间。 |
     | 范围   | My Code            | 用户代码。                                                       |
     | 范围   | All Code           | 全部代码。                                                       |
     | 聚合维度 | Line               | 代码行。                                                        |
     | 聚合维度 | Method             | 方法。                                                         |
     | 聚合维度 | Class              | 类。                                                          |
     | 聚合维度 | Package            | Java包名称。                                                    |
        
     
   
   - 按照方法路径搜索：搜索框设置搜索条件后，单击![](https://support.huaweicloud.com/usermanual-apm2/zh-cn_image_0000002549816113.png)，查看满足搜索条件的火焰图。
   
   - 单击时间维度选择按钮，默认"近20分钟"。 当前支持"近5分钟"、"近20分钟"、"近1小时"、"近3小时"、"近6小时"、"近1天"、"今天"、"昨天"以及自定义。
     
   
   - 页面下方实时展示每一个线程、方法、类和包的调用关系和执行效率。
     表2Profiler参数说明 
     | 参数    | 说明                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                |
     |:---|:---|
     | 火焰图   | - 火焰图Y轴（纵轴）表示调用栈，每一层都是一个函数（包），调用的越深，火焰层数越高，最底部（火焰尖）是正在执行的函数，上方是它的父函数。  - 火焰图X轴（横轴）表示CPU占用时长、trace相关线程的方法执行的总耗时、已分配的堆内存大小或已分配但未被回收的堆内存大小。以CPU占用时长为例，占用的CPU时间越长，在火焰图X轴上的距离越长。  - 在火焰图中，相同的方法或包显示的颜色相同。  - 鼠标放在火焰图上，展示某一个方法、类和线程的详细信息。  - 单击火焰图中某个方法条，该方法条横向放大。单击首列"Total"列标题行，火焰图还原。   |
     | 方法路径  | - 鼠标放在Location类某个方法名称上，展示该方法的详细信息。  - 单击Location类某个方法名称，火焰图侧对应的方法会高亮显示，其余方法灰化。再次单击同一个方法名称，火焰图恢复原状。                                                                                                                                                                                                                                                                                                                                                                         |
     | Self  | 仅方法自身的性能消耗，不包含调用方法。该数值为所有线程执行结果的总和，因此结果有可能大于所选时间段。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                |
     | Total | 总性能消耗，包含方法自身及其调用方法。该数值为所有线程执行结果的总和，因此结果有可能大于所选时间段。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                |
        
     
   
   
   
   
 
