aboutsummaryrefslogtreecommitdiff
path: root/src/runtime/pprof/pprof.go
diff options
context:
space:
mode:
authorJun10ng <zeonll@outlook.com>2024-01-27 11:53:43 +0000
committerGopher Robot <gobot@golang.org>2024-01-30 00:04:58 +0000
commitf96d9a643202b9f28fad3756d0de8ac6b5c159dd (patch)
tree1c20e37738671416ff9491aa2c54443d03e27c3a /src/runtime/pprof/pprof.go
parent0c64be46ac292ea5b387c6cda49b07f4a366c404 (diff)
downloadgo-f96d9a643202b9f28fad3756d0de8ac6b5c159dd.tar.xz
runtime: reduce one STW when obtaining goroutine configuration file
Fixes #54014 Change-Id: If4ee2752008729e1ed4b767cfda52effdcec4959 GitHub-Last-Rev: 5ce300bf5128f842604d85d5f8749027c8e091c2 GitHub-Pull-Request: golang/go#58239 Reviewed-on: https://go-review.googlesource.com/c/go/+/464349 Reviewed-by: qiulaidongfeng <2645477756@qq.com> TryBot-Result: Gopher Robot <gobot@golang.org> Reviewed-by: Michael Pratt <mpratt@google.com> Run-TryBot: qiulaidongfeng <2645477756@qq.com> Auto-Submit: Michael Pratt <mpratt@google.com> LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com> Reviewed-by: Michael Knyszek <mknyszek@google.com>
Diffstat (limited to 'src/runtime/pprof/pprof.go')
-rw-r--r--src/runtime/pprof/pprof.go11
1 files changed, 10 insertions, 1 deletions
diff --git a/src/runtime/pprof/pprof.go b/src/runtime/pprof/pprof.go
index a4dcf33508..79ca11c6b4 100644
--- a/src/runtime/pprof/pprof.go
+++ b/src/runtime/pprof/pprof.go
@@ -755,6 +755,9 @@ func writeGoroutineStacks(w io.Writer) error {
return err
}
+// runtime_gcount is defined in runtime/mprof.go
+func runtime_gcount() (n int)
+
func writeRuntimeProfile(w io.Writer, debug int, name string, fetch func([]runtime.StackRecord, []unsafe.Pointer) (int, bool)) error {
// Find out how many records there are (fetch(nil)),
// allocate that many records, and get the data.
@@ -764,7 +767,13 @@ func writeRuntimeProfile(w io.Writer, debug int, name string, fetch func([]runti
// The loop should only execute one iteration in the common case.
var p []runtime.StackRecord
var labels []unsafe.Pointer
- n, ok := fetch(nil, nil)
+ var n, ok = 0, false
+ if name == "goroutine" {
+ n = runtime_gcount()
+ } else {
+ n, ok = fetch(nil, nil)
+ }
+
for {
// Allocate room for a slightly bigger profile,
// in case a few more entries have been added