> ## Documentation Index
> Fetch the complete documentation index at: https://openidea.sh/llms.txt
> Use this file to discover all available pages before exploring further.

# 性能分析

> 用采样分析器对运行配置做性能分析，并以火焰图、调用树或方法列表查看结果。

**性能分析** 在外部采样分析器下执行[运行配置](https://openidea.sh/zh/guide/run.md)。程序退出（或被你停止）后，IDE 读取采样数据，并在性能分析器工具窗口中打开。

## 对运行做性能分析

* 使用 **运行 › 性能分析** 分析当前选中的配置。
* 在边栏运行图标的菜单或运行小部件的 **更多操作** 菜单中选择性能分析那一项。
* **对上下文配置进行性能分析**（在 **查找操作…** 中，`⌘⇧A` / `Ctrl+Shift+A`）分析光标处的程序或测试。

程序照常在运行工具窗口里执行。如果缺少分析器，通知会说明缺的是什么，并提供 **安装**（有安装命令时）或 **下载…**（打开分析器的下载页面）。

## 支持的运行时

| 运行时 | 配置 | 分析器 | 平台 |
| - | - | - | - |
| Node.js | `node`、`npx`、`tsx`、`ts-node` 程序，以及 npm、pnpm、yarn 脚本 | `node --cpu-prof`（通过 `NODE_OPTIONS` 设置，本次运行的所有 Node.js 进程都会被分析） | 全部 |
| Python | 脚本、模块、pytest | `py-spy record`（包括子进程） | 全部 |
| JVM | 直接启动 `java` 的配置，例如 Application 和 JAR Application | async-profiler agent（通过 `JAVA_TOOL_OPTIONS` 设置） | macOS、Linux |
| Rust | `cargo run` | `perf record -g` | Linux |
| 原生程序 | native 配置 | `perf record -g` | Linux |

分析器的准备：

* **py-spy**：IDE 先在项目解释器所在目录查找，再到搜索路径中查找。项目没有使用包管理器时，会提供 `python -m pip install py-spy`。
* **async-profiler**：从 [async-profiler releases](https://github.com/async-profiler/async-profiler/releases) 下载并解压，把其中的 `bin/asprof` 加到 `PATH`，或者把 `ASYNC_PROFILER_HOME` 设为解压目录。IDE 无法替你安装。
* **perf**：安装发行版的 `linux-tools` / `linux-perf` 软件包。

暂不支持：Bun 和 Deno 程序、Windows 上的 JVM 程序、macOS 和 Windows 上的原生程序和 `cargo run`，以及 Maven、Gradle 配置。

## 查看结果

每次分析得到一个快照，最近五个快照以标签页形式保留在性能分析器工具窗口的标题栏上。每个快照有三个视图：

| 视图 | 内容 |
| - | - |
| **火焰图** | 从根节点向下堆叠的调用栈，越宽表示耗时越多。点击某一帧放大查看，点 **重置缩放** 返回。悬停可以看到总耗时和自身耗时。 |
| **调用树** | 同样的调用栈，以可展开的树展示，耗时最多的调用排在前面。 |
| **方法列表** | 每个函数一行，显示自身和总耗时。点击 **自身**、**总计** 或 **方法** 列标题排序。 |

双击某一帧或某一行，可以打开对应的源代码位置。在标题栏的 **搜索帧** 中输入文字，会在火焰图中高亮匹配的帧，并过滤方法列表。

快照只在当前会话中保留，切换项目或关闭窗口后就会清空。


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.