Skip to content

Commit

Permalink
dump cpu/mem profile into file on signal SIGUSR1/SIGUSR2
Browse files Browse the repository at this point in the history
Signed-off-by: 张祖建 <[email protected]>
  • Loading branch information
zhangzujian committed Sep 27, 2023
1 parent aee41bd commit 226a448
Showing 1 changed file with 47 additions and 0 deletions.
47 changes: 47 additions & 0 deletions cmd/cmdmain.go
Original file line number Diff line number Diff line change
@@ -1,8 +1,15 @@
package main

import (
"fmt"
"os"
"os/signal"
"path/filepath"
"runtime/pprof"
"syscall"
"time"

"k8s.io/klog/v2"

"github.com/kubeovn/kube-ovn/cmd/controller"
"github.com/kubeovn/kube-ovn/cmd/controller_health_check"
Expand All @@ -24,7 +31,47 @@ const (
CmdOvnLeaderChecker = "kube-ovn-leader-checker"
)

const timeFormat = "2006-01-02_15:04:05"

func main() {
ch1 := make(chan os.Signal, 1)
ch2 := make(chan os.Signal, 1)
signal.Notify(ch1, syscall.SIGUSR1)
signal.Notify(ch2, syscall.SIGUSR2)
go func() {
for {
<-ch1
name := fmt.Sprintf("cpu-profile-%s.pprof", time.Now().Format(timeFormat))
f, err := os.Create(filepath.Join(os.TempDir(), name))
if err != nil {
klog.Errorf("failed to create cpu profile file: %v", err)
return
}
defer f.Close()
if err = pprof.StartCPUProfile(f); err != nil {
klog.Errorf("failed to start cpu profile: %v", err)
return
}
time.Sleep(30 * time.Second)
pprof.StopCPUProfile()
}
}()
go func() {
for {
<-ch2
name := fmt.Sprintf("mem-profile-%s.pprof", time.Now().Format(timeFormat))
f, err := os.Create(filepath.Join(os.TempDir(), name))
if err != nil {
klog.Errorf("failed to create memory profile file: %v", err)
return
}
defer f.Close()
if err = pprof.WriteHeapProfile(f); err != nil {
klog.Errorf("failed to write memory profile file: %v", err)
}
}
}()

cmd := filepath.Base(os.Args[0])
switch cmd {
case CmdController:
Expand Down

0 comments on commit 226a448

Please sign in to comment.