mirror of
https://github.com/1Panel-dev/1Panel.git
synced 2025-11-10 03:30:53 +08:00
refactor(container): optimize memory calculation and concurrent data handling (#8038)
Some checks failed
SonarCloud Scan / SonarCloud (push) Failing after -15s
Some checks failed
SonarCloud Scan / SonarCloud (push) Failing after -15s
* refactor(container): optimize memory calculation and concurrent data handling Refs #8033 * Update container.go --------- Co-authored-by: ssongliu <73214554+ssongliu@users.noreply.github.com>
This commit is contained in:
parent
186075ff9a
commit
33d4ade1d4
1 changed files with 17 additions and 5 deletions
|
|
@ -255,14 +255,14 @@ func (u *ContainerService) ContainerListStats() ([]dto.ContainerListStats, error
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
var datas []dto.ContainerListStats
|
datas := make([]dto.ContainerListStats, len(list))
|
||||||
var wg sync.WaitGroup
|
var wg sync.WaitGroup
|
||||||
wg.Add(len(list))
|
wg.Add(len(list))
|
||||||
for i := 0; i < len(list); i++ {
|
for i := 0; i < len(list); i++ {
|
||||||
go func(item types.Container) {
|
go func(index int, item types.Container) {
|
||||||
datas = append(datas, loadCpuAndMem(client, item.ID))
|
datas[index] = loadCpuAndMem(client, item.ID)
|
||||||
wg.Done()
|
wg.Done()
|
||||||
}(list[i])
|
}(i, list[i])
|
||||||
}
|
}
|
||||||
wg.Wait()
|
wg.Wait()
|
||||||
return datas, nil
|
return datas, nil
|
||||||
|
|
@ -937,15 +937,27 @@ func calculateCPUPercentUnix(stats *types.StatsJSON) float64 {
|
||||||
}
|
}
|
||||||
return cpuPercent
|
return cpuPercent
|
||||||
}
|
}
|
||||||
|
|
||||||
func calculateMemPercentUnix(memStats types.MemoryStats) float64 {
|
func calculateMemPercentUnix(memStats types.MemoryStats) float64 {
|
||||||
memPercent := 0.0
|
memPercent := 0.0
|
||||||
memUsage := float64(memStats.Usage)
|
memUsage := calculateMemUsageUnixNoCache(memStats)
|
||||||
memLimit := float64(memStats.Limit)
|
memLimit := float64(memStats.Limit)
|
||||||
if memUsage > 0.0 && memLimit > 0.0 {
|
if memUsage > 0.0 && memLimit > 0.0 {
|
||||||
memPercent = (memUsage / memLimit) * 100.0
|
memPercent = (memUsage / memLimit) * 100.0
|
||||||
}
|
}
|
||||||
return memPercent
|
return memPercent
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func calculateMemUsageUnixNoCache(mem types.MemoryStats) float64 {
|
||||||
|
if v, isCgroup1 := mem.Stats["total_inactive_file"]; isCgroup1 && v < mem.Usage {
|
||||||
|
return float64(mem.Usage - v)
|
||||||
|
}
|
||||||
|
if v := mem.Stats["inactive_file"]; v < mem.Usage {
|
||||||
|
return float64(mem.Usage - v)
|
||||||
|
}
|
||||||
|
return float64(mem.Usage)
|
||||||
|
}
|
||||||
|
|
||||||
func calculateBlockIO(blkio types.BlkioStats) (blkRead float64, blkWrite float64) {
|
func calculateBlockIO(blkio types.BlkioStats) (blkRead float64, blkWrite float64) {
|
||||||
for _, bioEntry := range blkio.IoServiceBytesRecursive {
|
for _, bioEntry := range blkio.IoServiceBytesRecursive {
|
||||||
switch strings.ToLower(bioEntry.Op) {
|
switch strings.ToLower(bioEntry.Op) {
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue