Merge pull request #1304 from AudriusButkevicius/pprof
Add STBLOCKPROFILE
This commit is contained in:
commit
2a8e5e2c14
|
@ -0,0 +1,59 @@
|
||||||
|
// Copyright (C) 2014 The Syncthing Authors.
|
||||||
|
//
|
||||||
|
// This program is free software: you can redistribute it and/or modify it
|
||||||
|
// under the terms of the GNU General Public License as published by the Free
|
||||||
|
// Software Foundation, either version 3 of the License, or (at your option)
|
||||||
|
// any later version.
|
||||||
|
//
|
||||||
|
// This program is distributed in the hope that it will be useful, but WITHOUT
|
||||||
|
// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||||
|
// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
|
||||||
|
// more details.
|
||||||
|
//
|
||||||
|
// You should have received a copy of the GNU General Public License along
|
||||||
|
// with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
|
package main
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
"os"
|
||||||
|
"runtime"
|
||||||
|
"runtime/pprof"
|
||||||
|
"syscall"
|
||||||
|
"time"
|
||||||
|
)
|
||||||
|
|
||||||
|
func init() {
|
||||||
|
if innerProcess && os.Getenv("STBLOCKPROFILE") != "" {
|
||||||
|
profiler := pprof.Lookup("block")
|
||||||
|
if profiler == nil {
|
||||||
|
panic("Couldn't find block profiler")
|
||||||
|
}
|
||||||
|
l.Debugln("Starting block profiling")
|
||||||
|
go saveBlockingProfiles(profiler)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func saveBlockingProfiles(profiler *pprof.Profile) {
|
||||||
|
runtime.SetBlockProfileRate(1)
|
||||||
|
|
||||||
|
t0 := time.Now()
|
||||||
|
for t := range time.NewTicker(20 * time.Second).C {
|
||||||
|
startms := int(t.Sub(t0).Seconds() * 1000)
|
||||||
|
|
||||||
|
fd, err := os.Create(fmt.Sprintf("block-%05d-%07d.pprof", syscall.Getpid(), startms))
|
||||||
|
if err != nil {
|
||||||
|
panic(err)
|
||||||
|
}
|
||||||
|
err = profiler.WriteTo(fd, 0)
|
||||||
|
if err != nil {
|
||||||
|
panic(err)
|
||||||
|
}
|
||||||
|
err = fd.Close()
|
||||||
|
if err != nil {
|
||||||
|
panic(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
|
@ -142,38 +142,41 @@ Development Settings
|
||||||
The following environment variables modify syncthing's behavior in ways that
|
The following environment variables modify syncthing's behavior in ways that
|
||||||
are mostly useful for developers. Use with care.
|
are mostly useful for developers. Use with care.
|
||||||
|
|
||||||
STGUIASSETS Directory to load GUI assets from. Overrides compiled in assets.
|
STGUIASSETS Directory to load GUI assets from. Overrides compiled in assets.
|
||||||
|
|
||||||
STTRACE A comma separated string of facilities to trace. The valid
|
STTRACE A comma separated string of facilities to trace. The valid
|
||||||
facility strings are:
|
facility strings are:
|
||||||
|
|
||||||
- "beacon" (the beacon package)
|
- "beacon" (the beacon package)
|
||||||
- "discover" (the discover package)
|
- "discover" (the discover package)
|
||||||
- "events" (the events package)
|
- "events" (the events package)
|
||||||
- "files" (the files package)
|
- "files" (the files package)
|
||||||
- "net" (the main package; connections & network messages)
|
- "net" (the main package; connections & network messages)
|
||||||
- "model" (the model package)
|
- "model" (the model package)
|
||||||
- "scanner" (the scanner package)
|
- "scanner" (the scanner package)
|
||||||
- "stats" (the stats package)
|
- "stats" (the stats package)
|
||||||
- "upnp" (the upnp package)
|
- "upnp" (the upnp package)
|
||||||
- "xdr" (the xdr package)
|
- "xdr" (the xdr package)
|
||||||
- "all" (all of the above)
|
- "all" (all of the above)
|
||||||
|
|
||||||
STPROFILER Set to a listen address such as "127.0.0.1:9090" to start the
|
STPROFILER Set to a listen address such as "127.0.0.1:9090" to start the
|
||||||
profiler with HTTP access.
|
profiler with HTTP access.
|
||||||
|
|
||||||
STCPUPROFILE Write a CPU profile to cpu-$pid.pprof on exit.
|
STCPUPROFILE Write a CPU profile to cpu-$pid.pprof on exit.
|
||||||
|
|
||||||
STHEAPPROFILE Write heap profiles to heap-$pid-$timestamp.pprof each time
|
STHEAPPROFILE Write heap profiles to heap-$pid-$timestamp.pprof each time
|
||||||
heap usage increases.
|
heap usage increases.
|
||||||
|
|
||||||
STPERFSTATS Write running performance statistics to perf-$pid.csv. Not
|
STBLOCKPROFILE Write block profiles to block-$pid-$timestamp.pprof every 20
|
||||||
supported on Windows.
|
seconds.
|
||||||
|
|
||||||
STNOUPGRADE Disable automatic upgrades.
|
STPERFSTATS Write running performance statistics to perf-$pid.csv. Not
|
||||||
|
supported on Windows.
|
||||||
|
|
||||||
GOMAXPROCS Set the maximum number of CPU cores to use. Defaults to all
|
STNOUPGRADE Disable automatic upgrades.
|
||||||
available CPU cores.`
|
|
||||||
|
GOMAXPROCS Set the maximum number of CPU cores to use. Defaults to all
|
||||||
|
available CPU cores.`
|
||||||
)
|
)
|
||||||
|
|
||||||
// Command line and environment options
|
// Command line and environment options
|
||||||
|
|
Loading…
Reference in New Issue