IntelliJ IDEA 2026.1 Help

性能分析简介

性能分析是一种运行时分析,处理大量运行时数据,并让您从全局视角了解进程内部发生的情况。 收集的数据与程序运行的各个方面有关,如 CPU 使用率、内存 %a 分配和线程活动。

分析可以是瞬时的,比如捕获内存快照,也可以是长期运行的。 例如,CPU 分析器可以在任意长的时间段内收集数据,比如数小时甚至数天的程序运行期间。

何时进行性能分析有帮助?

性能分析工具帮助您:

  • 识别错误、瓶颈并诊断性能问题

  • 识别热点和优化机会,不一定与性能问题有关

  • 评估或比较不同解决方案的性能

  • 更好地理解程序在底层的运行方式

支持的分析类型

IntelliJ Profiler不是单一工具,而是一套相关工具。 它们都有自己的应用领域:

  • CPU 和内存实时图表——允许您实时监控进程。 这种类型的诊断会提供资源消耗随时间变化的指标,可能作为监控工具或在出现性能问题时作为进一步调查的起点。

  • CPU 和内存分配分析——让您了解在特定时间段内 CPU 和内存资源的使用情况。 这可能对检测热点代码、优化机会,或仅仅是发现程序在运行时的运行方式有所帮助。

  • 内存快照 - 可让您分析特定时刻内存的使用情况。 这些数据对于调查与内存相关的问题很有用。

  • 线程转储——使您可以查看程序在特定时刻的状态。 生成的数据捕捉了所有线程的状态。 这可能会很有用,例如,用来检查一个无响应的应用程序。

可用分析器

GoLand 使用 runtime/pprof 软件包中的内置分析器。 每个分析器都会收集特定类型的性能数据。

  • CPU 分析器显示程序在使用 CPU 时的耗时位置。

    帮助查找主动执行工作的函数/方法,而不是那些等待 I/O 或同步的函数/方法。

  • 分析器报告内存用法。

    显示已分配的内存和仍在使用的内存。 分配是指请求保留内存,例如在创建切片或结构时。 使用该分析器检测高内存用法和内存泄漏。

  • 分配数 分析器会随时间报告所有内存分配。

    帮助查找创建大量对象的代码,即使这些对象是短期的。

  • Goroutine 分析器显示所有当前 goroutine 的堆栈跟踪。

    Goroutine 是由 Go 运行时管理的轻量级线程。 使用该分析器了解并发,并检测阻塞或异常的 goroutine。

  • 分析器显示 goroutine 等待的位置。

    阻塞操作会在条件满足前暂停执行。 例如,goroutine 可以等待 channel、锁或 I/O。 此分析器有助于查找由同步引起的延迟。

  • 互斥锁 分析器显示锁竞争。

    互斥锁是一种用于保护共享数据的锁。 当多个 goroutine 同时尝试获取相同锁时会发生竞争。 此分析器有助于查找由锁引起的延迟。

  • 线程创建 分析器显示程序创建操作系统线程的位置。

    使用该分析器检测线程过多创建,并了解运行时如何调度工作。

配置 Go 分析器

可以在 IDE 设置中配置 Go 分析器。 设置决定配置文件的存储位置及分析器采集数据的频率。

为应用程序配置分析

  1. Ctrl+Alt+S 打开设置,然后转到 构建、执行、部署 | 分析器 | Go 分析器:应用程序

  2. 配置全局分析形参:

    • 默认分析目录 用于定义 IDE 存储捕获配置文件的位置。

    • 内存分析采样率 用于指定分析器采样内存分配的频率。

      该值指定记录分配之间的平均字节数。 较低的值会增加细节和开销。 默认值为 512 KB。

    • 阻塞分析采样率 用于指定分析器记录阻塞事件的频率。

      该值以纳秒为单位。 设置较低的值可记录更多事件。

    • 互斥锁分析比例 用于指定分析器记录的互斥锁竞争事件数量。

      该值控制采样比率。 例如,值 10 表示分析器记录十个事件中的一个。

为测试配置分析

  1. Ctrl+Alt+S 打开设置,然后转到 构建、执行、部署 | 分析器 | Go 分析器:测试

  2. 为测试运行配置分析器:

    • CPU 分析器 在测试执行期间记录 CPU 用法。

    • 内存分析器 记录内存分配。

      使用 配置文件速率 定义分析器采样分配的频率。 将值设置为 1 以记录所有分配。 将字段留空即可使用默认值(512 KB)。

    • 阻塞分析器 记录阻塞事件。

      当 goroutine 等待诸如 channel、锁或 I/O 等资源时,会发生阻塞事件。

      使用 配置文件速率 定义分析器采样阻塞事件的频率。 将值设置为 1 以记录所有事件。

    • 互斥锁分析器 记录互斥锁竞争。

      当多个 goroutine 尝试获取相同锁时,就会发生互斥锁竞争。

      使用 配置文件比例 定义分析器记录事件的比例。 例如,值 10 表示分析器记录十个事件中的一个。

分析的工作原理

GoLand 使用标准 Go pprof 工具收集分析数据。

开始分析时,IDE 会通过临时覆盖层构建应用程序。 覆盖层会在构建中 inject 分析钩子,而不会修改源文件。

IDE 会运行类似如下的命令:

GOROOT=/path/to/go GOPATH=/path/to/gopath go build -overlay /tmp/goland_overlay.json -o /tmp/binary /tmp/binary

覆盖文件定义用于启用分析的临时变更。 GoLand 会在运行结束后移除这些变更。

2026年 3月 24日