Merge pull request #3231 from kevpar/dump-stacks-to-file

Don't write dumped stacks to file for ETW capture state
This commit is contained in:
Phil Estes 2019-04-19 13:43:49 -04:00 committed by GitHub
commit 835e6d01fb
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 14 additions and 12 deletions

View File

@ -278,7 +278,7 @@ func setLevel(context *cli.Context, config *srvconfig.Config) error {
return nil return nil
} }
func dumpStacks() { func dumpStacks(writeToFile bool) {
var ( var (
buf []byte buf []byte
stackSize int stackSize int
@ -292,6 +292,7 @@ func dumpStacks() {
buf = buf[:stackSize] buf = buf[:stackSize]
logrus.Infof("=== BEGIN goroutine stack dump ===\n%s\n=== END goroutine stack dump ===", buf) logrus.Infof("=== BEGIN goroutine stack dump ===\n%s\n=== END goroutine stack dump ===", buf)
if writeToFile {
// Also write to file to aid gathering diagnostics // Also write to file to aid gathering diagnostics
name := filepath.Join(os.TempDir(), fmt.Sprintf("containerd.%d.stacks.log", os.Getpid())) name := filepath.Join(os.TempDir(), fmt.Sprintf("containerd.%d.stacks.log", os.Getpid()))
f, err := os.Create(name) f, err := os.Create(name)
@ -301,4 +302,5 @@ func dumpStacks() {
defer f.Close() defer f.Close()
f.WriteString(string(buf)) f.WriteString(string(buf))
logrus.Infof("goroutine stack dump written to %s", name) logrus.Infof("goroutine stack dump written to %s", name)
}
} }

View File

@ -48,7 +48,7 @@ func handleSignals(ctx context.Context, signals chan os.Signal, serverC chan *se
log.G(ctx).WithField("signal", s).Debug("received signal") log.G(ctx).WithField("signal", s).Debug("received signal")
switch s { switch s {
case unix.SIGUSR1: case unix.SIGUSR1:
dumpStacks() dumpStacks(true)
case unix.SIGPIPE: case unix.SIGPIPE:
continue continue
default: default:

View File

@ -88,14 +88,14 @@ func setupDumpStacks() {
logrus.Debugf("Stackdump - waiting signal at %s", event) logrus.Debugf("Stackdump - waiting signal at %s", event)
for { for {
windows.WaitForSingleObject(h, windows.INFINITE) windows.WaitForSingleObject(h, windows.INFINITE)
dumpStacks() dumpStacks(true)
} }
}() }()
} }
func etwCallback(sourceID *guid.GUID, state etw.ProviderState, level etw.Level, matchAnyKeyword uint64, matchAllKeyword uint64, filterData uintptr) { func etwCallback(sourceID *guid.GUID, state etw.ProviderState, level etw.Level, matchAnyKeyword uint64, matchAllKeyword uint64, filterData uintptr) {
if state == etw.ProviderStateCaptureState { if state == etw.ProviderStateCaptureState {
dumpStacks() dumpStacks(false)
} }
} }