Skip to content

internal/trace/traceview: panic if try to handle plot empty mmu slice #74146

Open
@peczenyj

Description

@peczenyj

Go version

go version 1.24.4 on linux

Output of go env in your module/workspace:

AR='ar'
CC='gcc'
CGO_CFLAGS='-O2 -g'
CGO_CPPFLAGS=''
CGO_CXXFLAGS='-O2 -g'
CGO_ENABLED='1'
CGO_FFLAGS='-O2 -g'
CGO_LDFLAGS='-O2 -g'
CXX='g++'
GCCGO='gccgo'
GO111MODULE=''
GOAMD64='v1'
GOARCH='amd64'
GOAUTH='netrc'
GOBIN=''
GOCACHE='/home/tiago/.cache/go-build'
GOCACHEPROG=''
GODEBUG=''
GOENV='/home/tiago/.config/go/env'
GOEXE=''
GOEXPERIMENT=''
GOFIPS140='off'
GOFLAGS=''
GOGCCFLAGS='-fPIC -m64 -pthread -Wl,--no-gc-sections -fmessage-length=0 -ffile-prefix-map=/tmp/go-build3237773918=/tmp/go-build -gno-record-gcc-switches'
GOHOSTARCH='amd64'
GOHOSTOS='linux'
GOINSECURE=''
GOMOD='/dev/null'
GOMODCACHE='/home/tiago/work/go/pkg/mod'
GONOPROXY='gitlab.nereides.weborama.com'
GONOSUMDB='gitlab.nereides.weborama.com'
GOOS='linux'
GOPATH='/home/tiago/work/go'
GOPRIVATE='gitlab.nereides.weborama.com'
GOPROXY='https://proxy.golang.org,direct'
GOROOT='/usr/local/go1.24.4'
GOSUMDB='sum.golang.org'
GOTELEMETRY='on'
GOTELEMETRYDIR='/home/tiago/.config/go/telemetry'
GOTMPDIR=''
GOTOOLCHAIN='auto'
GOTOOLDIR='/usr/local/go1.24.4/pkg/tool/linux_amd64'
GOVCS=''
GOVERSION='go1.24.4'
GOWORK=''
PKG_CONFIG='pkg-config'

What did you do?

while I was trying to analyse a 5s trace from my application, using the snipped presented on https://pkg.go.dev/net/http/pprof

curl -o trace.out http://localhost:6060/debug/pprof/trace?seconds=5
go tool trace trace.out

What did you see happen?

the tool open my default browser in the trace page

When I click on the link Minimum mutator utilization that uses endpoint /mmu I got a modal with an error (see screenshot below) and I can see the following panic stack trace:

2025/06/13 14:43:05 http: panic serving 127.0.0.1:44114: runtime error: index out of range [0] with length 0
goroutine 77 [running]:
net/http.(*conn).serve.func1()
	net/http/server.go:1947 +0xbe
panic({0x9324c0?, 0xc000028330?})
	runtime/panic.go:792 +0x132
internal/trace/traceviewer.(*mmu).HandlePlot(0xc000236030, {0xcbf2f8, 0xc002a40460}, 0xc002a3e140)
	internal/trace/traceviewer/mmu.go:140 +0x9a6
main.main.MMUHandlerFunc.func21({0xcbf2f8, 0xc002a40460}, 0xc002a3e140)
	internal/trace/traceviewer/mmu.go:52 +0x67
net/http.HandlerFunc.ServeHTTP(0xc0002320c0?, {0xcbf2f8?, 0xc002a40460?}, 0x761436?)
	net/http/server.go:2294 +0x29
net/http.(*ServeMux).ServeHTTP(0x474d79?, {0xcbf2f8, 0xc002a40460}, 0xc002a3e140)
	net/http/server.go:2822 +0x1c4
net/http.serverHandler.ServeHTTP({0xc0000c9c80?}, {0xcbf2f8?, 0xc002a40460?}, 0x6?)
	net/http/server.go:3301 +0x8e
net/http.(*conn).serve(0xc002a60090, {0xcbfa30, 0xc0002361b0})
	net/http/server.go:2102 +0x625
created by net/http.(*Server).Serve in goroutine 1
	net/http/server.go:3454 +0x485

Image

To be honnest, this is not a big issue, but it is annoying

By check go source code, I find the possible root cause

https://cs.opensource.google/go/go/+/refs/tags/go1.24.4:src/internal/trace/traceviewer/mmu.go;l=140

I believe the mu slice is empty, then when try to fetch mu[0] it panics.

probably some basic length check can be done to prevent it. I could try to send a Pull Request however I have no idea what should be the output (perhaps a 404 ?)

What did you expect to see?

No panic and perhaps a nice message about "having no data to show"

Activity

peczenyj

peczenyj commented on Jun 13, 2025

@peczenyj
Author

this is the trace file, in case it is needed:
trace.out.zip

changed the title [-]internal/trace/traceview: panic if try to handle plot empty slice[/-] [+]internal/trace/traceview: panic if try to handle plot empty mmu slice[/+] on Jun 13, 2025
added
BugReportIssues describing a possible bug in the Go implementation.
on Jun 13, 2025
added
NeedsInvestigationSomeone must examine and confirm this is a valid issue and not a duplicate of an existing one.
compiler/runtimeIssues related to the Go compiler and/or runtime.
on Jun 13, 2025
cherrymui

cherrymui commented on Jun 13, 2025

@cherrymui
Member

cc @golang/runtime @mknyszek @cagedmantis

added this to the Go1.25 milestone on Jun 13, 2025
mknyszek

mknyszek commented on Jun 13, 2025

@mknyszek
Contributor

Huh. I'm slightly worried there's a deeper bug here, that a simple length check would just end up hiding. I'll take a look at the trace file and try to see what the appropriate behavior here should be based on the trace data.

mknyszek

mknyszek commented on Jun 13, 2025

@mknyszek
Contributor

I think I'm finding multiple UI issues with this trace. 😅 This is a useful test case. I'll send some fixes.

self-assigned this
on Jun 13, 2025
peczenyj

peczenyj commented on Jun 13, 2025

@peczenyj
Author

Huh. I'm slightly worried there's a deeper bug here, that a simple length check would just end up hiding. I'll take a look at the trace file and try to see what the appropriate behavior here should be based on the trace data.

The program that generates this trace is quite old (compiled with go 1.20.6), not sure if it matters

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

BugReportIssues describing a possible bug in the Go implementation.NeedsInvestigationSomeone must examine and confirm this is a valid issue and not a duplicate of an existing one.compiler/runtimeIssues related to the Go compiler and/or runtime.

Type

No type

Projects

Status

In Progress

Relationships

None yet

    Development

    No branches or pull requests

      Participants

      @peczenyj@mknyszek@cherrymui@gabyhelp

      Issue actions

        internal/trace/traceview: panic if try to handle plot empty mmu slice · Issue #74146 · golang/go