mirror of
https://github.com/TeaOSLab/EdgeNode.git
synced 2025-11-09 12:00:26 +08:00
执行定时任务时自动根据负载进行延后执行
This commit is contained in:
@@ -10,6 +10,7 @@ import (
|
|||||||
"github.com/TeaOSLab/EdgeNode/internal/goman"
|
"github.com/TeaOSLab/EdgeNode/internal/goman"
|
||||||
"github.com/TeaOSLab/EdgeNode/internal/remotelogs"
|
"github.com/TeaOSLab/EdgeNode/internal/remotelogs"
|
||||||
"github.com/TeaOSLab/EdgeNode/internal/utils/fasttime"
|
"github.com/TeaOSLab/EdgeNode/internal/utils/fasttime"
|
||||||
|
fsutils "github.com/TeaOSLab/EdgeNode/internal/utils/fs"
|
||||||
"github.com/TeaOSLab/EdgeNode/internal/utils/kvstore"
|
"github.com/TeaOSLab/EdgeNode/internal/utils/kvstore"
|
||||||
"testing"
|
"testing"
|
||||||
"time"
|
"time"
|
||||||
@@ -78,6 +79,8 @@ func (this *KVIPList) init() error {
|
|||||||
})
|
})
|
||||||
|
|
||||||
for range this.cleanTicker.C {
|
for range this.cleanTicker.C {
|
||||||
|
fsutils.WaitLoad(15, 16, 1*time.Hour)
|
||||||
|
|
||||||
deleteErr := this.DeleteExpiredItems()
|
deleteErr := this.DeleteExpiredItems()
|
||||||
if deleteErr != nil {
|
if deleteErr != nil {
|
||||||
remotelogs.Error("IP_LIST_DB", "clean expired items failed: "+deleteErr.Error())
|
remotelogs.Error("IP_LIST_DB", "clean expired items failed: "+deleteErr.Error())
|
||||||
|
|||||||
@@ -8,6 +8,7 @@ import (
|
|||||||
"github.com/TeaOSLab/EdgeNode/internal/goman"
|
"github.com/TeaOSLab/EdgeNode/internal/goman"
|
||||||
"github.com/TeaOSLab/EdgeNode/internal/remotelogs"
|
"github.com/TeaOSLab/EdgeNode/internal/remotelogs"
|
||||||
"github.com/TeaOSLab/EdgeNode/internal/utils/dbs"
|
"github.com/TeaOSLab/EdgeNode/internal/utils/dbs"
|
||||||
|
fsutils "github.com/TeaOSLab/EdgeNode/internal/utils/fs"
|
||||||
"github.com/iwind/TeaGo/Tea"
|
"github.com/iwind/TeaGo/Tea"
|
||||||
"os"
|
"os"
|
||||||
"path/filepath"
|
"path/filepath"
|
||||||
@@ -167,9 +168,11 @@ ON "` + this.itemTableName + `" (
|
|||||||
})
|
})
|
||||||
|
|
||||||
for range this.cleanTicker.C {
|
for range this.cleanTicker.C {
|
||||||
err := this.DeleteExpiredItems()
|
fsutils.WaitLoad(15, 16, 1*time.Hour)
|
||||||
if err != nil {
|
|
||||||
remotelogs.Error("IP_LIST_DB", "clean expired items failed: "+err.Error())
|
deleteErr := this.DeleteExpiredItems()
|
||||||
|
if deleteErr != nil {
|
||||||
|
remotelogs.Error("IP_LIST_DB", "clean expired items failed: "+deleteErr.Error())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|||||||
@@ -11,6 +11,7 @@ import (
|
|||||||
"github.com/TeaOSLab/EdgeNode/internal/trackers"
|
"github.com/TeaOSLab/EdgeNode/internal/trackers"
|
||||||
"github.com/TeaOSLab/EdgeNode/internal/utils"
|
"github.com/TeaOSLab/EdgeNode/internal/utils"
|
||||||
byteutils "github.com/TeaOSLab/EdgeNode/internal/utils/byte"
|
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/utils/kvstore"
|
||||||
"github.com/TeaOSLab/EdgeNode/internal/zero"
|
"github.com/TeaOSLab/EdgeNode/internal/zero"
|
||||||
"github.com/cockroachdb/pebble"
|
"github.com/cockroachdb/pebble"
|
||||||
@@ -287,6 +288,8 @@ func (this *KVTask) Start() error {
|
|||||||
this.cleanTicker = utils.NewTicker(24 * time.Hour)
|
this.cleanTicker = utils.NewTicker(24 * time.Hour)
|
||||||
goman.New(func() {
|
goman.New(func() {
|
||||||
for this.cleanTicker.Next() {
|
for this.cleanTicker.Next() {
|
||||||
|
fsutils.WaitLoad(15, 16, 1*time.Hour)
|
||||||
|
|
||||||
var tr = trackers.Begin("METRIC:CLEAN_EXPIRED")
|
var tr = trackers.Begin("METRIC:CLEAN_EXPIRED")
|
||||||
err := this.CleanExpired()
|
err := this.CleanExpired()
|
||||||
tr.End()
|
tr.End()
|
||||||
|
|||||||
@@ -13,6 +13,7 @@ import (
|
|||||||
"github.com/TeaOSLab/EdgeNode/internal/trackers"
|
"github.com/TeaOSLab/EdgeNode/internal/trackers"
|
||||||
"github.com/TeaOSLab/EdgeNode/internal/utils"
|
"github.com/TeaOSLab/EdgeNode/internal/utils"
|
||||||
"github.com/TeaOSLab/EdgeNode/internal/utils/dbs"
|
"github.com/TeaOSLab/EdgeNode/internal/utils/dbs"
|
||||||
|
fsutils "github.com/TeaOSLab/EdgeNode/internal/utils/fs"
|
||||||
"github.com/TeaOSLab/EdgeNode/internal/zero"
|
"github.com/TeaOSLab/EdgeNode/internal/zero"
|
||||||
"github.com/iwind/TeaGo/Tea"
|
"github.com/iwind/TeaGo/Tea"
|
||||||
"github.com/iwind/TeaGo/types"
|
"github.com/iwind/TeaGo/types"
|
||||||
@@ -209,6 +210,8 @@ func (this *SQLiteTask) Start() error {
|
|||||||
this.cleanTicker = utils.NewTicker(24 * time.Hour)
|
this.cleanTicker = utils.NewTicker(24 * time.Hour)
|
||||||
goman.New(func() {
|
goman.New(func() {
|
||||||
for this.cleanTicker.Next() {
|
for this.cleanTicker.Next() {
|
||||||
|
fsutils.WaitLoad(15, 16, 1*time.Hour)
|
||||||
|
|
||||||
var tr = trackers.Begin("METRIC:CLEAN_EXPIRED")
|
var tr = trackers.Begin("METRIC:CLEAN_EXPIRED")
|
||||||
err := this.CleanExpired()
|
err := this.CleanExpired()
|
||||||
tr.End()
|
tr.End()
|
||||||
|
|||||||
@@ -6,7 +6,7 @@ import (
|
|||||||
"fmt"
|
"fmt"
|
||||||
"github.com/TeaOSLab/EdgeNode/internal/remotelogs"
|
"github.com/TeaOSLab/EdgeNode/internal/remotelogs"
|
||||||
executils "github.com/TeaOSLab/EdgeNode/internal/utils/exec"
|
executils "github.com/TeaOSLab/EdgeNode/internal/utils/exec"
|
||||||
"github.com/shirou/gopsutil/v3/load"
|
fsutils "github.com/TeaOSLab/EdgeNode/internal/utils/fs"
|
||||||
"runtime"
|
"runtime"
|
||||||
"time"
|
"time"
|
||||||
)
|
)
|
||||||
@@ -31,15 +31,7 @@ func (this *TrimDisksTask) Start() {
|
|||||||
var ticker = time.NewTicker(2 * 24 * time.Hour) // every 2 days
|
var ticker = time.NewTicker(2 * 24 * time.Hour) // every 2 days
|
||||||
for range ticker.C {
|
for range ticker.C {
|
||||||
// prevent system overload
|
// prevent system overload
|
||||||
for i := 0; i < 24; i++ {
|
fsutils.WaitLoad(15, 24, 1*time.Hour)
|
||||||
stat, loadErr := load.Avg()
|
|
||||||
if loadErr == nil && stat != nil && stat.Load1 > 15 {
|
|
||||||
// wait load downgrade
|
|
||||||
time.Sleep(1 * time.Hour)
|
|
||||||
} else {
|
|
||||||
break
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// run the task
|
// run the task
|
||||||
err = this.loop()
|
err = this.loop()
|
||||||
|
|||||||
@@ -9,6 +9,7 @@ import (
|
|||||||
"github.com/TeaOSLab/EdgeNode/internal/goman"
|
"github.com/TeaOSLab/EdgeNode/internal/goman"
|
||||||
"github.com/TeaOSLab/EdgeNode/internal/remotelogs"
|
"github.com/TeaOSLab/EdgeNode/internal/remotelogs"
|
||||||
"github.com/TeaOSLab/EdgeNode/internal/utils/fasttime"
|
"github.com/TeaOSLab/EdgeNode/internal/utils/fasttime"
|
||||||
|
fsutils "github.com/TeaOSLab/EdgeNode/internal/utils/fs"
|
||||||
"github.com/TeaOSLab/EdgeNode/internal/utils/kvstore"
|
"github.com/TeaOSLab/EdgeNode/internal/utils/kvstore"
|
||||||
"github.com/iwind/TeaGo/Tea"
|
"github.com/iwind/TeaGo/Tea"
|
||||||
"github.com/iwind/TeaGo/types"
|
"github.com/iwind/TeaGo/types"
|
||||||
@@ -94,6 +95,8 @@ func (this *DAUManager) Init() error {
|
|||||||
// clean expires items
|
// clean expires items
|
||||||
goman.New(func() {
|
goman.New(func() {
|
||||||
for range this.cleanTicker.C {
|
for range this.cleanTicker.C {
|
||||||
|
fsutils.WaitLoad(15, 16, 1*time.Hour)
|
||||||
|
|
||||||
err := this.CleanStats()
|
err := this.CleanStats()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
remotelogs.Error("DAU_MANAGER", "clean stats failed: "+err.Error())
|
remotelogs.Error("DAU_MANAGER", "clean stats failed: "+err.Error())
|
||||||
|
|||||||
@@ -140,3 +140,13 @@ func calculateDiskMaxWrites() {
|
|||||||
DiskMaxWrites = 4
|
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)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
@@ -6,6 +6,7 @@ import (
|
|||||||
fsutils "github.com/TeaOSLab/EdgeNode/internal/utils/fs"
|
fsutils "github.com/TeaOSLab/EdgeNode/internal/utils/fs"
|
||||||
"github.com/iwind/TeaGo/assert"
|
"github.com/iwind/TeaGo/assert"
|
||||||
"testing"
|
"testing"
|
||||||
|
"time"
|
||||||
)
|
)
|
||||||
|
|
||||||
func TestWrites(t *testing.T) {
|
func TestWrites(t *testing.T) {
|
||||||
@@ -20,6 +21,10 @@ func TestWrites(t *testing.T) {
|
|||||||
a.IsTrue(fsutils.WriteReady())
|
a.IsTrue(fsutils.WriteReady())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestWaitLoad(t *testing.T) {
|
||||||
|
fsutils.WaitLoad(100, 1, 1 * time.Minute)
|
||||||
|
}
|
||||||
|
|
||||||
func BenchmarkWrites(b *testing.B) {
|
func BenchmarkWrites(b *testing.B) {
|
||||||
b.RunParallel(func(pb *testing.PB) {
|
b.RunParallel(func(pb *testing.PB) {
|
||||||
for pb.Next() {
|
for pb.Next() {
|
||||||
|
|||||||
Reference in New Issue
Block a user