Add PPROFLISTEN (#1019)

* Add PPROFLISTEN env var

* Direct logging to more useful places

* Space
main
Neil Alexander 2020-05-11 18:21:39 +01:00 committed by GitHub
parent 0c892d59fa
commit 32624697fd
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 15 additions and 2 deletions

View File

@ -15,8 +15,6 @@
package main package main
import ( import (
_ "net/http/pprof"
"github.com/matrix-org/dendrite/common/basecomponent" "github.com/matrix-org/dendrite/common/basecomponent"
"github.com/matrix-org/dendrite/common/keydb" "github.com/matrix-org/dendrite/common/keydb"
"github.com/matrix-org/dendrite/roomserver" "github.com/matrix-org/dendrite/roomserver"

View File

@ -42,6 +42,8 @@ import (
federationSenderAPI "github.com/matrix-org/dendrite/federationsender/api" federationSenderAPI "github.com/matrix-org/dendrite/federationsender/api"
roomserverAPI "github.com/matrix-org/dendrite/roomserver/api" roomserverAPI "github.com/matrix-org/dendrite/roomserver/api"
"github.com/sirupsen/logrus" "github.com/sirupsen/logrus"
_ "net/http/pprof"
) )
// BaseDendrite is a base for creating new instances of dendrite. It parses // BaseDendrite is a base for creating new instances of dendrite. It parses
@ -71,6 +73,7 @@ const HTTPClientTimeout = time.Second * 30
func NewBaseDendrite(cfg *config.Dendrite, componentName string) *BaseDendrite { func NewBaseDendrite(cfg *config.Dendrite, componentName string) *BaseDendrite {
common.SetupStdLogging() common.SetupStdLogging()
common.SetupHookLogging(cfg.Logging, componentName) common.SetupHookLogging(cfg.Logging, componentName)
common.SetupPprof()
closer, err := cfg.SetupTracing("Dendrite" + componentName) closer, err := cfg.SetupTracing("Dendrite" + componentName)
if err != nil { if err != nil {

View File

@ -18,6 +18,7 @@ import (
"context" "context"
"fmt" "fmt"
"io" "io"
"net/http"
"os" "os"
"path" "path"
"path/filepath" "path/filepath"
@ -79,6 +80,17 @@ func callerPrettyfier(f *runtime.Frame) (string, string) {
return funcname, filename return funcname, filename
} }
// SetupPprof starts a pprof listener. We use the DefaultServeMux here because it is
// simplest, and it gives us the freedom to run pprof on a separate port.
func SetupPprof() {
if hostPort := os.Getenv("PPROFLISTEN"); hostPort != "" {
logrus.Warn("Starting pprof on ", hostPort)
go func() {
logrus.WithError(http.ListenAndServe(hostPort, nil)).Error("Failed to setup pprof listener")
}()
}
}
// SetupStdLogging configures the logging format to standard output. Typically, it is called when the config is not yet loaded. // SetupStdLogging configures the logging format to standard output. Typically, it is called when the config is not yet loaded.
func SetupStdLogging() { func SetupStdLogging() {
logrus.SetReportCaller(true) logrus.SetReportCaller(true)