Skip to content

Visiting goroutine stacks by pprof can block all goroutines #35664

Closed
@lixiaojun629

Description

@lixiaojun629

What version of Go are you using (go version)?

$ go version
go version go1.13.4 darwin/amd64

Does this issue reproduce with the latest release?

Yes

What operating system and processor architecture are you using (go env)?

go env Output
$ go env
GO111MODULE=""
GOARCH="amd64"
GOBIN=""
GOCACHE="/Users/rilke/Library/Caches/go-build"
GOENV="/Users/rilke/Library/Application Support/go/env"
GOEXE=""
GOFLAGS=""
GOHOSTARCH="amd64"
GOHOSTOS="darwin"
GONOPROXY=""
GONOSUMDB=""
GOOS="darwin"
GOPATH="/Users/rilke/go"
GOPRIVATE=""
GOPROXY="https://goproxy.io,direct"
GOROOT="/usr/local/Cellar/go/1.13.4/libexec"
GOSUMDB="sum.golang.org"
GOTMPDIR=""
GOTOOLDIR="/usr/local/Cellar/go/1.13.4/libexec/pkg/tool/darwin_amd64"
GCCGO="gccgo"
AR="ar"
CC="clang"
CXX="clang++"
CGO_ENABLED="1"
GOMOD=""
CGO_CFLAGS="-g -O2"
CGO_CPPFLAGS=""
CGO_CXXFLAGS="-g -O2"
CGO_FFLAGS="-g -O2"
CGO_LDFLAGS="-g -O2"
PKG_CONFIG="pkg-config"
GOGCCFLAGS="-fPIC -m64 -pthread -fno-caret-diagnostics -Qunused-arguments -fmessage-length=0 -fdebug-prefix-map=/var/folders/jg/d03tz52x12g_xf_x7cmdtn840000gn/T/go-build179904585=/tmp/go-build -gno-record-gcc-switches -fno-common"

What did you do?

I run the code below, and open the url http://localhost:6060/debug/pprof/goroutine?debug=1 in my browser. But the page never show and the string "xx" stop printing, which means goroutine2 stop running.

package main

import (
	"fmt"
	"net/http"
	_ "net/http/pprof"
)

func main() {
        //goroutine1
	go func() {
		for {
		}
	}()
       //goroutine2
	go func() {
		for {
			fmt.Println("xx")
		}
	}()

	http.ListenAndServe("0.0.0.0:6060", nil)
}

What did you expect to see?

I expect the page http://localhost:6060/debug/pprof/goroutine?debug=1 to be loaded normally, and goroutine2 should not stop printing

What did you see instead?

The page http://localhost:6060/debug/pprof/goroutine?debug=1 never load and goroutine2 stop printing when I visit the url http://localhost:6060/debug/pprof/goroutine?debug=1 in my browser.

Activity

hyangah

hyangah commented on Nov 18, 2019

@hyangah
Contributor

Seems like #10958 - for goroutine profile, runtime tries to stop the world.

ianlancetaylor

ianlancetaylor commented on Nov 18, 2019

@ianlancetaylor
Contributor

Don't write busy loops in Go.

That said, this should work better in the upcoming Go 1.14 release. Closing as dup of #10958.

locked and limited conversation to collaborators on Nov 17, 2020
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

      Development

      No branches or pull requests

        Participants

        @ianlancetaylor@lixiaojun629@hyangah@gopherbot

        Issue actions

          Visiting goroutine stacks by pprof can block all goroutines · Issue #35664 · golang/go