aboutsummaryrefslogtreecommitdiff
path: root/weed/util
diff options
context:
space:
mode:
Diffstat (limited to 'weed/util')
-rw-r--r--weed/util/pprof.go33
-rw-r--r--weed/util/signal_handling.go31
-rw-r--r--weed/util/signal_handling_notsupported.go6
3 files changed, 70 insertions, 0 deletions
diff --git a/weed/util/pprof.go b/weed/util/pprof.go
new file mode 100644
index 000000000..94bcdb8b3
--- /dev/null
+++ b/weed/util/pprof.go
@@ -0,0 +1,33 @@
+package util
+
+import (
+ "os"
+ "runtime/pprof"
+
+ "github.com/chrislusf/seaweedfs/weed/glog"
+)
+
+func SetupProfiling(cpuProfile, memProfile string) {
+ if cpuProfile != "" {
+ f, err := os.Create(cpuProfile)
+ if err != nil {
+ glog.Fatal(err)
+ }
+ pprof.StartCPUProfile(f)
+ defer pprof.StopCPUProfile()
+ OnInterrupt(func() {
+ pprof.StopCPUProfile()
+ })
+ }
+ if memProfile != "" {
+ f, err := os.Create(memProfile)
+ if err != nil {
+ glog.Fatal(err)
+ }
+ OnInterrupt(func() {
+ pprof.WriteHeapProfile(f)
+ f.Close()
+ })
+ }
+
+}
diff --git a/weed/util/signal_handling.go b/weed/util/signal_handling.go
new file mode 100644
index 000000000..7da898738
--- /dev/null
+++ b/weed/util/signal_handling.go
@@ -0,0 +1,31 @@
+// +build !plan9
+
+package util
+
+import (
+ "os"
+ "os/signal"
+ "syscall"
+)
+
+func OnInterrupt(fn func()) {
+ // deal with control+c,etc
+ signalChan := make(chan os.Signal, 1)
+ // controlling terminal close, daemon not exit
+ signal.Ignore(syscall.SIGHUP)
+ signal.Notify(signalChan,
+ os.Interrupt,
+ os.Kill,
+ syscall.SIGALRM,
+ // syscall.SIGHUP,
+ syscall.SIGINT,
+ syscall.SIGTERM,
+ // syscall.SIGQUIT,
+ )
+ go func() {
+ for _ = range signalChan {
+ fn()
+ os.Exit(0)
+ }
+ }()
+}
diff --git a/weed/util/signal_handling_notsupported.go b/weed/util/signal_handling_notsupported.go
new file mode 100644
index 000000000..c389cfb7e
--- /dev/null
+++ b/weed/util/signal_handling_notsupported.go
@@ -0,0 +1,6 @@
+// +build plan9
+
+package util
+
+func OnInterrupt(fn func()) {
+}