Documentation ¶
Overview ¶
Package profile provides a simple way to manage runtime/pprof profiling of your Go application.
Index ¶
- Constants
- func BlockProfile(p *Profile)
- func CPUProfile(p *Profile)
- func ClockProfile(p *Profile)
- func GoroutineProfile(p *Profile)
- func MemProfile(p *Profile)
- func MemProfileAllocs(p *Profile)
- func MemProfileHeap(p *Profile)
- func MemProfileRate(rate int) func(*Profile)
- func MutexProfile(p *Profile)
- func NoShutdownHook(p *Profile)
- func ProfilePath(path string) func(*Profile)
- func Quiet(p *Profile)
- func Start(options ...func(*Profile)) interface{ ... }
- func ThreadcreationProfile(p *Profile)
- func TraceProfile(p *Profile)
- type Profile
Examples ¶
Constants ¶
const DefaultMemProfileRate = 4096
DefaultMemProfileRate is the default memory profiling rate. See also http://golang.org/pkg/runtime/#pkg-variables
Variables ¶
This section is empty.
Functions ¶
func BlockProfile ¶
func BlockProfile(p *Profile)
BlockProfile enables block (contention) profiling. It disables any previous profiling settings.
func CPUProfile ¶
func CPUProfile(p *Profile)
CPUProfile enables cpu profiling. It disables any previous profiling settings.
Example ¶
package main import ( "github.com/pkg/profile" ) func main() { // CPU profiling is the default profiling mode, but you can specify it // explicitly for completeness. defer profile.Start(profile.CPUProfile).Stop() }
Output:
func ClockProfile ¶ added in v1.7.0
func ClockProfile(p *Profile)
ClockProfile enables wall clock (fgprof) profiling. It disables any previous profiling settings.
func GoroutineProfile ¶ added in v1.4.0
func GoroutineProfile(p *Profile)
GoroutineProfile enables goroutine profiling. It disables any previous profiling settings.
func MemProfile ¶
func MemProfile(p *Profile)
MemProfile enables memory profiling. It disables any previous profiling settings.
Example ¶
package main import ( "github.com/pkg/profile" ) func main() { // use memory profiling, rather than the default cpu profiling. defer profile.Start(profile.MemProfile).Stop() }
Output:
func MemProfileAllocs ¶ added in v1.5.0
func MemProfileAllocs(p *Profile)
MemProfileAllocs changes which type of memory to profile allocations.
Example ¶
package main import ( "github.com/pkg/profile" ) func main() { // use allocs memory profiling. defer profile.Start(profile.MemProfileAllocs).Stop() }
Output:
func MemProfileHeap ¶ added in v1.5.0
func MemProfileHeap(p *Profile)
MemProfileHeap changes which type of memory profiling to profile the heap.
Example ¶
package main import ( "github.com/pkg/profile" ) func main() { // use heap memory profiling. defer profile.Start(profile.MemProfileHeap).Stop() }
Output:
func MemProfileRate ¶
MemProfileRate enables memory profiling at the preferred rate. It disables any previous profiling settings.
Example ¶
package main import ( "github.com/pkg/profile" ) func main() { // use memory profiling with custom rate. defer profile.Start(profile.MemProfileRate(2048)).Stop() }
Output:
func MutexProfile ¶ added in v1.2.1
func MutexProfile(p *Profile)
MutexProfile enables mutex profiling. It disables any previous profiling settings.
func NoShutdownHook ¶
func NoShutdownHook(p *Profile)
NoShutdownHook controls whether the profiling package should hook SIGINT to write profiles cleanly. Programs with more sophisticated signal handling should set this to true and ensure the Stop() function returned from Start() is called during shutdown.
Example ¶
package main import ( "github.com/pkg/profile" ) func main() { // disable the automatic shutdown hook. defer profile.Start(profile.NoShutdownHook).Stop() }
Output:
func ProfilePath ¶
ProfilePath controls the base path where various profiling files are written. If blank, the base path will be generated by ioutil.TempDir.
Example ¶
package main import ( "os" "github.com/pkg/profile" ) func main() { // set the location that the profile will be written to defer profile.Start(profile.ProfilePath(os.Getenv("HOME"))).Stop() }
Output:
func Start ¶
func Start(options ...func(*Profile)) interface { Stop() }
Start starts a new profiling session. The caller should call the Stop method on the value returned to cleanly stop profiling.
Example ¶
package main import ( "github.com/pkg/profile" ) func main() { // start a simple CPU profile and register // a defer to Stop (flush) the profiling data. defer profile.Start().Stop() }
Output:
Example (WithFlags) ¶
package main import ( "flag" "github.com/pkg/profile" ) func main() { // use the flags package to selectively enable profiling. mode := flag.String("profile.mode", "", "enable profiling mode, one of [cpu, mem, mutex, block]") flag.Parse() switch *mode { case "cpu": defer profile.Start(profile.CPUProfile).Stop() case "mem": defer profile.Start(profile.MemProfile).Stop() case "mutex": defer profile.Start(profile.MutexProfile).Stop() case "block": defer profile.Start(profile.BlockProfile).Stop() default: // do nothing } }
Output:
func ThreadcreationProfile ¶ added in v1.3.0
func ThreadcreationProfile(p *Profile)
ThreadcreationProfile enables thread creation profiling.. It disables any previous profiling settings.
func TraceProfile ¶ added in v1.2.0
func TraceProfile(p *Profile)
Trace profile enables execution tracing. It disables any previous profiling settings.
Example ¶
package main import ( "github.com/pkg/profile" ) func main() { // use execution tracing, rather than the default cpu profiling. defer profile.Start(profile.TraceProfile).Stop() }
Output: