Go pprof Operations: Difference between revisions

From NovaOrdis Knowledge Base
Jump to navigation Jump to search
Line 11: Line 11:
If the process has TLS enabled, see [[#TLS_and_Certificates|TLS and Certificates]] for suggestions on how to address the issue.
If the process has TLS enabled, see [[#TLS_and_Certificates|TLS and Certificates]] for suggestions on how to address the issue.


=Dump Profiles in Text Format=
=Dump Profiles=


Once a Go executable is started with the [[#Make_Sure_an_Executable_Starts_with_the_Profiling_Subsystem_Enabled|profiling subsystem enabled]], you can use <code>curl</code> to connect to the embedded web server and dump various [[Go_pprof_Concepts#Profile|profiles]].
Once a Go executable is started with the [[#Make_Sure_an_Executable_Starts_with_the_Profiling_Subsystem_Enabled|profiling subsystem enabled]], you can use <code>curl</code> to connect to the embedded web server and dump various [[Go_pprof_Concepts#Profile|profiles]].


==Dump Goroutines==
The general syntax of the command is:
This command dumps the [[Go_pprof_Concepts#goroutine|<code>goroutine</code> profile]].
<syntaxhighlight lang='bash'>
curl -k https://localhost:<http-port>/debug/pprof/<profile-name>?[debug=1|2]
</syntaxhighlight>
where profile name can be one of <code[[Go_pprof_Concepts#goroutine|goroutine]]</code>, <code>[[Go_pprof_Concepts#heap|heap]]</code>, <code>[[Go_pprof_Concepts#threadcreate|threadcreate]]</code>, <code>[[Go_pprof_Concepts#block|block]]</code>, <code>[[Go_pprof_Concepts#mutex|mutex]]</code>.
 
For example, to dump goroutines:
<syntaxhighlight lang='bash'>
<syntaxhighlight lang='bash'>
curl -k https://localhost:<http-port>/debug/pprof/goroutine?debug=2 > ~/tmp/goroutine-profile.txt
curl -k https://localhost:<http-port>/debug/pprof/goroutine?debug=2 > ~/tmp/goroutine-profile.txt

Revision as of 04:03, 16 November 2024

Internal

Make Sure an Executable Starts with the Profiling Subsystem Enabled

TODO

Connect with a Browser to an Executable that Has the Profiling Subsystem Enabled

Go to https://127.0.0.1:8443/debug/pprof/

If the process has TLS enabled, see TLS and Certificates for suggestions on how to address the issue.

Dump Profiles

Once a Go executable is started with the profiling subsystem enabled, you can use curl to connect to the embedded web server and dump various profiles.

The general syntax of the command is:

curl -k https://localhost:<http-port>/debug/pprof/<profile-name>?[debug=1|2]

where profile name can be one of <codegoroutine, heap, threadcreate, block, mutex.

For example, to dump goroutines:

curl -k https://localhost:<http-port>/debug/pprof/goroutine?debug=2 > ~/tmp/goroutine-profile.txt

TLS and Certificates

Profile a Running Process

Assuming that your local 127.0.0.1 address is aliased to "localhost.somedomain.com" in /etc/hosts and the certificates are issued for "localhost.somedomain.com", set CERT_PATH to the directory that contains and and:

export CERT_PATH=/Users/ovidiu/some-project/config
go tool pprof -http 127.0.0.1:8080 -tls_cert ${CERT_PATH}/localhost.somedomain.com.chain.pem -tls_key ${CERT_PATH}/localhost.somedomain.com.key.pem https://localhost.somedomain.com:8443