Files
EdgeNode/internal/utils/mem/system.go

68 lines
1.3 KiB
Go
Raw Normal View History

// Copyright 2021 Liuxiangchao iwind.liu@gmail.com. All rights reserved.
2024-03-28 17:17:34 +08:00
package memutils
import (
teaconst "github.com/TeaOSLab/EdgeNode/internal/const"
2024-05-11 09:23:54 +08:00
"github.com/TeaOSLab/EdgeNode/internal/utils/goman"
2022-03-12 19:11:29 +08:00
"github.com/shirou/gopsutil/v3/mem"
2024-03-29 19:28:16 +08:00
"time"
)
var systemTotalMemory = -1
var systemMemoryBytes uint64
2024-03-29 19:28:16 +08:00
var availableMemoryGB int
func init() {
if !teaconst.IsMain {
return
}
_ = SystemMemoryGB()
2024-03-29 19:28:16 +08:00
goman.New(func() {
var ticker = time.NewTicker(10 * time.Second)
for range ticker.C {
stat, err := mem.VirtualMemory()
if err == nil {
availableMemoryGB = int(stat.Available >> 30)
}
}
})
}
2023-04-25 17:24:05 +08:00
// SystemMemoryGB 系统内存GB数量
// 必须保证不小于1
func SystemMemoryGB() int {
if systemTotalMemory > 0 {
return systemTotalMemory
}
stat, err := mem.VirtualMemory()
if err != nil {
2023-04-25 17:24:05 +08:00
return 1
}
systemMemoryBytes = stat.Total
2024-03-29 19:28:16 +08:00
availableMemoryGB = int(stat.Available >> 30)
systemTotalMemory = int(stat.Total >> 30)
2023-03-05 12:34:46 +08:00
if systemTotalMemory <= 0 {
systemTotalMemory = 1
}
setMaxMemory(systemTotalMemory)
return systemTotalMemory
}
// SystemMemoryBytes 系统内存总字节数
func SystemMemoryBytes() uint64 {
return systemMemoryBytes
}
2024-03-29 19:28:16 +08:00
// AvailableMemoryGB 获取当下可用内存GB数
func AvailableMemoryGB() int {
return availableMemoryGB
}