Measure and modify Go garbage collection behavior on AWS Graviton-based compute
Introduction
Choose an AWS Graviton-based instance for Go garbage collection benchmarking
Install Go and Benchstat on an AWS Graviton-based Amazon EC2 instance
Create a Go garbage collection benchmark
Run the benchmark with default Go garbage collection settings
Interpret the default garbage collection benchmark results
Experiment with garbage collection optimization
Next Steps
Measure and modify Go garbage collection behavior on AWS Graviton-based compute
Introduction
Choose an AWS Graviton-based instance for Go garbage collection benchmarking
Install Go and Benchstat on an AWS Graviton-based Amazon EC2 instance
Create a Go garbage collection benchmark
Run the benchmark with default Go garbage collection settings
Interpret the default garbage collection benchmark results
Experiment with garbage collection optimization
Next Steps
Who is this for?
This Learning Path is for engineers interested in learning more about Go garbage collection (GC) behavior on Arm.
What will you learn?
Upon completion of this Learning Path, you will be able to:
- Select an AWS Graviton-based instance for repeatable Go GC measurements
- Install Go and Benchstat on an Arm Linux server
- Run a Go benchmark that reports allocation, GC, and pause-time metrics
- Capture CPU and heap profiles without changing GC behavior
- Interpret benchmarking results and experiment with changing GC behavior
Prerequisites
Before starting, you will need the following:
- An AWS account with permission to launch an AWS Graviton-based Amazon EC2 instance running Ubuntu 24.04 LTS or another Arm Linux distribution
- The AWS CLI installed and configured on your local machine
- Basic familiarity with Go benchmarks and Linux shell commands
Summary
This summary was drafted with an approved AI-assisted workflow and reviewed by Arm contributors before publication. Human technical review remains part of the process so the final page reflects engineering rigor, accuracy, and Arm editorial standards.
Frequently asked questions
These FAQs were drafted with an approved AI-assisted workflow and reviewed by Arm contributors before publication. Human technical review remains part of the process so the final page reflects engineering rigor, accuracy, and Arm editorial standards.
go version and check that it reports linux/arm64. Also run go env GOOS GOARCH and confirm GOARCH is arm64.GOGC, GOMEMLIMIT, GODEBUG, and GOMAXPROCS aren’t set. Use env | grep -E '^(GOGC|GOMEMLIMIT|GODEBUG|GOMAXPROCS)=' || true and unset any variables that appear.GOOS/GOARCH, CPU count, and memory) and raw benchmark output in default_gc_benchmark.txt. Run benchstat default_gc_benchmark.txt next to create the summary used to compare and interpret the baseline metrics.ns/op shows time per operation (lower is faster), B/op shows bytes allocated per operation, and allocs/op shows the number of allocations per operation—lower values generally reduce GC pressure. gc/op indicates how often GC cycles occur per operation. A lower gc/op means GC runs less frequently for the same work.GOGC, GOMEMLIMIT, GODEBUG, and GOMAXPROCS unset and run the benchmark using the profiling commands. The run writes CPU and heap profiles alongside the benchmark results while preserving default GC behavior.