mirror of
				https://github.com/go-gitea/gitea.git
				synced 2025-10-26 12:27:06 +00:00 
			
		
		
		
	Add fgprof pprof profiler (#20005)
fgprof is a sampling Go profiler that allows you to analyze On-CPU as well as Off-CPU (e.g. I/O) time together. Go's builtin sampling CPU profiler can only show On-CPU time, but it's better than fgprof at that. Go also includes tracing profilers that can analyze I/O, but they can't be combined with the CPU profiler. fgprof is designed for analyzing applications with mixed I/O and CPU workloads. This kind of profiling is also known as wall-clock profiling. Whilst fgprof can cause significant STW latencies in applications with a lot of goroutines (> 1-10k), these latencies only occur if the profile is requested - it doesn't cause a delay by simply being available. The fgprof profile is mounted on `http://localhost:6060/debug/fgprof?seconds=3` Signed-off-by: Andrew Thornton <art27@cantab.net>
This commit is contained in:
		@@ -21,6 +21,7 @@ import (
 | 
			
		||||
	"code.gitea.io/gitea/routers"
 | 
			
		||||
	"code.gitea.io/gitea/routers/install"
 | 
			
		||||
 | 
			
		||||
	"github.com/felixge/fgprof"
 | 
			
		||||
	"github.com/urfave/cli"
 | 
			
		||||
	ini "gopkg.in/ini.v1"
 | 
			
		||||
)
 | 
			
		||||
@@ -145,6 +146,7 @@ func runWeb(ctx *cli.Context) error {
 | 
			
		||||
 | 
			
		||||
	if setting.EnablePprof {
 | 
			
		||||
		go func() {
 | 
			
		||||
			http.DefaultServeMux.Handle("/debug/fgprof", fgprof.Handler())
 | 
			
		||||
			_, _, finished := process.GetManager().AddTypedContext(context.Background(), "Web: PProf Server", process.SystemProcessType, true)
 | 
			
		||||
			log.Info("Starting pprof server on localhost:6060")
 | 
			
		||||
			log.Info("%v", http.ListenAndServe("localhost:6060", nil))
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user