From e7e3ef43456418cf75fff039693f4c86ec50ba08 Mon Sep 17 00:00:00 2001 From: samwaf Date: Fri, 24 Oct 2025 17:01:24 +0800 Subject: [PATCH] feat:gc task #496 --- enums/task_enum.go | 1 + main.go | 2 ++ waftask/entrance.go | 7 +++++++ waftask/task_gc.go | 39 +++++++++++++++++++++++++++++++++++++++ 4 files changed, 49 insertions(+) create mode 100644 waftask/task_gc.go diff --git a/enums/task_enum.go b/enums/task_enum.go index ad90aca..92b7498 100644 --- a/enums/task_enum.go +++ b/enums/task_enum.go @@ -19,4 +19,5 @@ const ( TASK_CLEAR_CC_WINDOWS = "task_clear_cc_windows" //清除ccWindows记录 TASK_CREATE_DB_INDEX = "task_create_db_index" //创建索引 TASK_CLEAR_WEBCACHE = "task_clear_webcache" //清除缓存 + TASK_GC = "task_gc" //GC回收 ) diff --git a/main.go b/main.go index 027a464..141fd9c 100644 --- a/main.go +++ b/main.go @@ -331,6 +331,8 @@ func (m *wafSystenService) run() { globalobj.GWAF_RUNTIME_OBJ_WAF_TaskRegistry.RegisterTask(enums.TASK_CLEAR_CC_WINDOWS, waftask.TaskCC) globalobj.GWAF_RUNTIME_OBJ_WAF_TaskRegistry.RegisterTask(enums.TASK_CREATE_DB_INDEX, waftask.TaskCreateIndex) globalobj.GWAF_RUNTIME_OBJ_WAF_TaskRegistry.RegisterTask(enums.TASK_CLEAR_WEBCACHE, waftask.TaskClearWebcache) + globalobj.GWAF_RUNTIME_OBJ_WAF_TaskRegistry.RegisterTask(enums.TASK_GC, waftask.TaskGC) + go waftask.TaskShareDbInfo() globalobj.GWAF_RUNTIME_OBJ_WAF_TaskScheduler = waftask.NewTaskScheduler(globalobj.GWAF_RUNTIME_OBJ_WAF_TaskRegistry) diff --git a/waftask/entrance.go b/waftask/entrance.go index a75061d..b06945a 100644 --- a/waftask/entrance.go +++ b/waftask/entrance.go @@ -98,6 +98,13 @@ func InitTaskDb() []model.Task { TaskMethod: enums.TASK_DELETE_HISTORY_INFO, }) + syncTaskToDb(model.Task{ + TaskName: "每天01:00进行GC回收", + TaskUnit: enums.TASK_DAY, + TaskValue: 1, + TaskAt: "01:00", + TaskMethod: enums.TASK_GC, + }) syncTaskToDb(model.Task{ TaskName: "每天02:13进行SSL证书申请", TaskUnit: enums.TASK_DAY, diff --git a/waftask/task_gc.go b/waftask/task_gc.go new file mode 100644 index 0000000..c78a237 --- /dev/null +++ b/waftask/task_gc.go @@ -0,0 +1,39 @@ +package waftask + +import ( + "SamWaf/common/zlog" + "runtime" +) + +func TaskGC() { + innerLogName := "TaskGC" + + // 获取GC前的内存统计 + var m1, m2 runtime.MemStats + runtime.ReadMemStats(&m1) + + zlog.Info(innerLogName, "准备进行GC回收", + "GC前内存使用", m1.Alloc/1024/1024, "MB", + "GC前堆内存", m1.HeapAlloc/1024/1024, "MB", + "GC前系统内存", m1.Sys/1024/1024, "MB", + "GC次数", m1.NumGC) + + // 执行GC + runtime.GC() + + // 获取GC后的内存统计 + runtime.ReadMemStats(&m2) + + // 计算内存释放量 + memFreed := int64(m1.Alloc) - int64(m2.Alloc) + heapFreed := int64(m1.HeapAlloc) - int64(m2.HeapAlloc) + + zlog.Info(innerLogName, "GC回收完成", + "GC后内存使用", m2.Alloc/1024/1024, "MB", + "GC后堆内存", m2.HeapAlloc/1024/1024, "MB", + "GC后系统内存", m2.Sys/1024/1024, "MB", + "GC次数", m2.NumGC, + "释放内存", memFreed/1024/1024, "MB", + "释放堆内存", heapFreed/1024/1024, "MB", + "GC耗时", m2.PauseTotalNs-m1.PauseTotalNs, "ns") +}