执行定时任务时自动根据负载进行延后执行

This commit is contained in:
GoEdgeLab
2024-04-12 21:13:19 +08:00
parent ca43d119e4
commit 35c57bf070
8 changed files with 35 additions and 13 deletions

View File

@@ -10,6 +10,7 @@ import (
"github.com/TeaOSLab/EdgeNode/internal/goman"
"github.com/TeaOSLab/EdgeNode/internal/remotelogs"
"github.com/TeaOSLab/EdgeNode/internal/utils/fasttime"
fsutils "github.com/TeaOSLab/EdgeNode/internal/utils/fs"
"github.com/TeaOSLab/EdgeNode/internal/utils/kvstore"
"testing"
"time"
@@ -78,6 +79,8 @@ func (this *KVIPList) init() error {
})
for range this.cleanTicker.C {
fsutils.WaitLoad(15, 16, 1*time.Hour)
deleteErr := this.DeleteExpiredItems()
if deleteErr != nil {
remotelogs.Error("IP_LIST_DB", "clean expired items failed: "+deleteErr.Error())

View File

@@ -8,6 +8,7 @@ import (
"github.com/TeaOSLab/EdgeNode/internal/goman"
"github.com/TeaOSLab/EdgeNode/internal/remotelogs"
"github.com/TeaOSLab/EdgeNode/internal/utils/dbs"
fsutils "github.com/TeaOSLab/EdgeNode/internal/utils/fs"
"github.com/iwind/TeaGo/Tea"
"os"
"path/filepath"
@@ -167,9 +168,11 @@ ON "` + this.itemTableName + `" (
})
for range this.cleanTicker.C {
err := this.DeleteExpiredItems()
if err != nil {
remotelogs.Error("IP_LIST_DB", "clean expired items failed: "+err.Error())
fsutils.WaitLoad(15, 16, 1*time.Hour)
deleteErr := this.DeleteExpiredItems()
if deleteErr != nil {
remotelogs.Error("IP_LIST_DB", "clean expired items failed: "+deleteErr.Error())
}
}
})

View File

@@ -11,6 +11,7 @@ import (
"github.com/TeaOSLab/EdgeNode/internal/trackers"
"github.com/TeaOSLab/EdgeNode/internal/utils"
byteutils "github.com/TeaOSLab/EdgeNode/internal/utils/byte"
fsutils "github.com/TeaOSLab/EdgeNode/internal/utils/fs"
"github.com/TeaOSLab/EdgeNode/internal/utils/kvstore"
"github.com/TeaOSLab/EdgeNode/internal/zero"
"github.com/cockroachdb/pebble"
@@ -287,6 +288,8 @@ func (this *KVTask) Start() error {
this.cleanTicker = utils.NewTicker(24 * time.Hour)
goman.New(func() {
for this.cleanTicker.Next() {
fsutils.WaitLoad(15, 16, 1*time.Hour)
var tr = trackers.Begin("METRIC:CLEAN_EXPIRED")
err := this.CleanExpired()
tr.End()

View File

@@ -13,6 +13,7 @@ import (
"github.com/TeaOSLab/EdgeNode/internal/trackers"
"github.com/TeaOSLab/EdgeNode/internal/utils"
"github.com/TeaOSLab/EdgeNode/internal/utils/dbs"
fsutils "github.com/TeaOSLab/EdgeNode/internal/utils/fs"
"github.com/TeaOSLab/EdgeNode/internal/zero"
"github.com/iwind/TeaGo/Tea"
"github.com/iwind/TeaGo/types"
@@ -209,6 +210,8 @@ func (this *SQLiteTask) Start() error {
this.cleanTicker = utils.NewTicker(24 * time.Hour)
goman.New(func() {
for this.cleanTicker.Next() {
fsutils.WaitLoad(15, 16, 1*time.Hour)
var tr = trackers.Begin("METRIC:CLEAN_EXPIRED")
err := this.CleanExpired()
tr.End()

View File

@@ -6,7 +6,7 @@ import (
"fmt"
"github.com/TeaOSLab/EdgeNode/internal/remotelogs"
executils "github.com/TeaOSLab/EdgeNode/internal/utils/exec"
"github.com/shirou/gopsutil/v3/load"
fsutils "github.com/TeaOSLab/EdgeNode/internal/utils/fs"
"runtime"
"time"
)
@@ -31,15 +31,7 @@ func (this *TrimDisksTask) Start() {
var ticker = time.NewTicker(2 * 24 * time.Hour) // every 2 days
for range ticker.C {
// prevent system overload
for i := 0; i < 24; i++ {
stat, loadErr := load.Avg()
if loadErr == nil && stat != nil && stat.Load1 > 15 {
// wait load downgrade
time.Sleep(1 * time.Hour)
} else {
break
}
}
fsutils.WaitLoad(15, 24, 1*time.Hour)
// run the task
err = this.loop()

View File

@@ -9,6 +9,7 @@ import (
"github.com/TeaOSLab/EdgeNode/internal/goman"
"github.com/TeaOSLab/EdgeNode/internal/remotelogs"
"github.com/TeaOSLab/EdgeNode/internal/utils/fasttime"
fsutils "github.com/TeaOSLab/EdgeNode/internal/utils/fs"
"github.com/TeaOSLab/EdgeNode/internal/utils/kvstore"
"github.com/iwind/TeaGo/Tea"
"github.com/iwind/TeaGo/types"
@@ -94,6 +95,8 @@ func (this *DAUManager) Init() error {
// clean expires items
goman.New(func() {
for range this.cleanTicker.C {
fsutils.WaitLoad(15, 16, 1*time.Hour)
err := this.CleanStats()
if err != nil {
remotelogs.Error("DAU_MANAGER", "clean stats failed: "+err.Error())

View File

@@ -140,3 +140,13 @@ func calculateDiskMaxWrites() {
DiskMaxWrites = 4
}
}
// WaitLoad wait system load to downgrade
func WaitLoad(maxLoad float64, maxLoops int, delay time.Duration) {
for i := 0; i < maxLoops; i++ {
stat, err := load.Avg()
if err == nil && stat.Load1 > maxLoad {
time.Sleep(delay)
}
}
}

View File

@@ -6,6 +6,7 @@ import (
fsutils "github.com/TeaOSLab/EdgeNode/internal/utils/fs"
"github.com/iwind/TeaGo/assert"
"testing"
"time"
)
func TestWrites(t *testing.T) {
@@ -20,6 +21,10 @@ func TestWrites(t *testing.T) {
a.IsTrue(fsutils.WriteReady())
}
func TestWaitLoad(t *testing.T) {
fsutils.WaitLoad(100, 1, 1 * time.Minute)
}
func BenchmarkWrites(b *testing.B) {
b.RunParallel(func(pb *testing.PB) {
for pb.Next() {