Profile performance
Performance profiling helps identify bottlenecks and optimize resource usage in TEN applications. This guide covers how to profile CPU usage and memory consumption in TEN projects using profiling tools and analyze the resulting performance data.
Go projects
TEN supports profiling for Go projects using the following tools:
gperftools
: Google Performance Tools for detailed CPU and heap memory profilingpprof
: Go's built-in profiler for CPU and memory analysis
These tools provide detailed performance insights through data collection, analysis, and visualization options to help you optimize your TEN Go applications effectively.
Install gperftools
Set up gperftools
and create the required library links on Ubuntu:
The symbolic links ensure that the profiling libraries are accessible in standard locations for your applications.
Profile CPU usage with gperftools
To profile your program's CPU usage, follow these steps:
-
Set up environment variables and run your program:
When the program exits, CPU performance data is generated and saved to the
/path/to/cpu.0001.prof
file. -
Generate CPU performance data periodically (optional):
To generate CPU profiling data at regular intervals, set the
CPUPROFILE_FREQUENCY
environment variable. For example, to collect data every 30 seconds:
Analyze CPU performance data
To analyze CPU performance data, run the following commands:
Profile heap memory usage with gperftools
To profile your program's heap memory usage, run the following commands:
Set the HEAP_PROFILE_TIME_INTERVAL
environment variable to periodically generate heap memory profiling data. All data is stored in the directory specified by HEAPPROFILE
.
Analyze heap memory performance data
Each generated heap memory performance data file has a .heap
extension. To analyze the data, convert the .heap
files to a human-readable text format. For example, to convert a .heap
file in /.../heap
to text format, run the following command:
The performance data looks like this:
You can also convert the .heap
file to other formats such as PDF or SVG. For example, to convert a .heap
file in /.../heap
to PDF format, run the following command:
The PDF output contains the same performance data as the text format but presented graphically.
You can also compare two sets of heap memory performance data. For example, to compare the data in /.../heap.0001.heap
and /.../heap.0002.heap
, run the following command:
The PDF shows the differences in heap memory usage between the two data sets.
If you generate heap memory performance data periodically, use the dump_heap_info_to_excel.py
script to analyze all heap memory performance data in a directory and generate an Excel file showing the memory usage trends. For example, to analyze all heap memory performance data in /.../heap
, run the following command:
The script generates raw performance data with symbols in the /.../raw
directory, human-readable text performance data in the /.../text
directory, and an Excel file in /.../heap.xlsx
.
To plot a line chart to display the heap memory usage trends, use:
Profile with pprof
Use pprof
to profile programs written in Go. The simplest way to profile a Go program is to use pprof_app_go
as your TEN application. When activated, the app reads environment variables to decide whether to activate the pprof
server and heap profiler.
Analyze pprof performance data
To convert heap performance data to a text format, use the following command:
To analyze all heap performance data and generate an Excel file, run:
To see a visual representation of Go heap performance data trends, plot a line chart: