diff --git a/cmd/edge-node/main.go b/cmd/edge-node/main.go index a2e525b..a3b4f25 100644 --- a/cmd/edge-node/main.go +++ b/cmd/edge-node/main.go @@ -228,11 +228,18 @@ func main() { }) app.On("gc", func() { var sock = gosock.NewTmpSock(teaconst.ProcessName) - _, err := sock.Send(&gosock.Command{Code: "gc"}) + reply, err := sock.Send(&gosock.Command{Code: "gc"}) if err != nil { fmt.Println("[ERROR]" + err.Error()) } else { - fmt.Println("ok") + if reply == nil { + fmt.Println("ok") + } else { + var paramMap = maps.NewMap(reply.Params) + var pauseMS = paramMap.GetFloat64("pauseMS") + var costMS = paramMap.GetFloat64("costMS") + fmt.Printf("ok, cost: %.4fms, pause: %.4fms", costMS, pauseMS) + } } }) app.On("ip.drop", func() { diff --git a/internal/nodes/node.go b/internal/nodes/node.go index 0955657..734c200 100644 --- a/internal/nodes/node.go +++ b/internal/nodes/node.go @@ -777,9 +777,19 @@ func (this *Node) listenSock() error { _ = cmd.ReplyOk() } case "gc": + var before = time.Now() runtime.GC() debug.FreeOSMemory() - _ = cmd.ReplyOk() + + var costSeconds = time.Since(before).Seconds() + var gcStats = &debug.GCStats{} + debug.ReadGCStats(gcStats) + _ = cmd.Reply(&gosock.Command{ + Params: map[string]any{ + "pauseMS": gcStats.PauseTotal.Seconds() * 1000, + "costMS": costSeconds * 1000, + }, + }) case "reload": err := this.syncConfig(0) if err != nil {