---
title: 热点函数分析
description: "通过ptrace对Python程序及Python和C/C++的混合程序进行采样，分析调用栈信息，获取Top20的热点函数并绘制火焰图。"
url: https://www.hikunpeng.com/document/detail/zh/kunpengdevkithistory/devkit_24/cliuserguide/KunpengDevKitCli_0085.html
sourcePath: /source/zh/kunpengdevkithistory/devkit_24/cliuserguide/KunpengDevKitCli_0085.html
indexId: 32d9a2ff05aea6ac0ca7c563550d3fba1af43f4b949c549972d1b583f8403fe681
---
# 热点函数分析

#### 命令功能

通过ptrace对Python程序及Python和C/C++的混合程序进行采样，分析调用栈信息，获取Top20的热点函数并绘制火焰图。

- 支持的Python版本为3.9.X。
- 仅支持openEuler操作系统。
- 仅支持PID模式采集分析。


#### 命令格式

```
devkit py-perf hotspot [-h] [-l {0,1,2,3}] [-d <sec>] [-i <msec>] [-p {PID}] [-o <file>] [--native]
```


#### 参数说明


**表1 参数说明**

| 参数 | 参数选项 | 说明 |
| --- | --- | --- |
| \-h/\-\-help | \- | 获取帮助信息。 |
| \-l/\-\-log\-level | 0/1/2/3 | 设置日志级别，默认为1。 0：日志级别为DEBUG。 1：日志级别为INFO。 2：日志级别为WARNING。 3：日志级别为ERROR。 |
| \-d/\-\-duration | \- | 设置采集时长，单位为秒，最小值为1秒，默认为一直采集，可使用Ctrl+\取消任务或Ctrl+C停止采集并进入分析。 |
| \-i/\-\-interval | \- | 设置采集间隔，单位为毫秒，取值范围1至1000毫秒，默认为10毫秒。 |
| \-p/\-\-pid | PID | 指定采集的进程PID。 |
| \-o/\-\-output | \- | 设置报告数据生成文件名；默认生成在当前所在目录，默认文件名格式为FlameGraph\-YMD\-HMS。 |
| \-\-native | \- | 设置是否采集Python和C的调用栈，使用此参数将采集Python和C的调用栈，否则仅采集Python调用栈。 |


#### 使用示例

```
devkit py-perf hotspot -p 2082596 -d 5 -i 100 -o /home/demo/flamegraph --native
```

- 参数-p 2082596表示采集进程号为2082596的进程数据，参数-d 5表示采集时长为5秒，参数-i 100表示采样间隔为100毫秒，参数-o /home/demo/flamegraph表示在/home/demo/下生成名为flamegraph.html火焰图文件，参数--native表示采集Python和C的调用栈。
- 示例的返回信息中堆栈信息过多，为便于展示已省略大部分堆栈内容，请以实际使用为准。


返回信息如下：

```
Python Hotspot Top20 Summary Report                     Time:2024/08/13 15:07:16
================================================================================
─────────────────────────────────────────────────────────────────────  Function                                                                                                     Runtime(ms)     Runtime(%)
─────────────────────────────────────────────────────────────────────  pthread_condattr_setpshared                                                                                        4722          82.04
pthread_condattr_setpshared
clone
blas_thread_server                                                                                                447           7.77
blas_thread_server
pthread_condattr_setpshared
clone
scipy_dgebal_64_                                                                                                    9           0.16
scipy_dgebal_64_
scipy_dgeev_64_
void eig_wrapper<f2c_doublecomplex, double>(char, char, char**, long const*, long const*) [clone .constprop.0]
generic_wrapped_legacy_loop
ufunc_generic_fastcall
_PyEval_EvalFrameDefault
_PyEval_EvalFrameDefault
dispatcher_vectorcall
_PyEval_EvalFrameDefault
_PyEval_EvalFrameDefault
_PyEval_EvalFrameDefault
_PyEval_EvalFrameDefault
_PyEval_EvalFrameDefault
eig (/usr/local/lib64/python3.9/site-packages/numpy/linalg/_linalg.py:1702)
compute_eigenvalues (/home/jjl/workspace/pyhotstpot_demo/ai-demo/numpy_test_1.py:10)
run (/usr/lib64/python3.9/concurrent/futures/thread.py:58)
_worker (/usr/lib64/python3.9/concurrent/futures/thread.py:83)
run (/usr/lib64/python3.9/threading.py:910)
_bootstrap_inner (/usr/lib64/python3.9/threading.py:973)
_bootstrap (/usr/lib64/python3.9/threading.py:930)
PyCodec_StreamReader
_PyGC_CollectNoFail
_Py_hashtable_destroy
pthread_condattr_setpshared
clone
dgemm_nn                                                                                                           9            0.16
dgemm_nn
─────────────────────────────────────────────────────────────────────The flamegraph html report: /home/demo/flamegraph.html
```

任务生成火焰图html文件可使用浏览器查看，因堆栈名称过长，鼠标悬停在对应堆栈块显示其信息，可单击对应堆栈块查看详情。

图1 火焰图
