Estou desenvolvendo um aplicativo que monitora coisas relacionadas ao sistema como CPU, RAM, etc. Mesmo com poucos dados durante o teste, sempre que executo meu código, há um aumento no uso da CPU geralmente em 30% por segundo sempre que os dados de pesquisa e depois retorna para normal. Então, existe alguma maneira de reduzir esse pico.
Aqui está o código:
package main
import (
"fmt"
"github.com/shirou/gopsutil/cpu"
"github.com/shirou/gopsutil/mem"
"github.com/shirou/gopsutil/process"
"github.com/shirou/gopsutil/load"
"github.com/shirou/gopsutil/disk"
"github.com/shirou/gopsutil/host"
"reflect"
"time"
)
func main() {
driveC := "C:"
processor, _ := cpu.Times(false)
memory,_ := mem.VirtualMemory()
cpuPercent,_ := cpu.Percent(time.Second,false)
fmt.Println(reflect.TypeOf(processor))
fmt.Println(reflect.TypeOf(memory))
fmt.Println(reflect.TypeOf(cpuPercent))
fmt.Println("CPU")
fmt.Println("CPU name",processor[0].CPU)
fmt.Println("User time",processor[0].User)
fmt.Println("Idle time",processor[0].Idle)
fmt.Println("System time",processor[0].System)
fmt.Println("Nice time",processor[0].Nice)
fmt.Println("IOwait time",processor[0].Iowait)
fmt.Println("Irq time",processor[0].Irq)
fmt.Println("SoftIrq time",processor[0].Softirq)
fmt.Println("CPU Percent",cpuPercent)
//fmt.Println(memory.Total)
infoStat, _ := cpu.Info()
fmt.Printf("\n")
fmt.Println("--> Hardware Info with Context: ", infoStat)
procCount, _ := cpu.ProcInfo()
fmt.Printf("\n")
fmt.Println("--> Process Count: ", procCount)
fmt.Println("-----------------DISK--------------------------------->")
driveUsage, _ := disk.Usage(driveC)
fmt.Printf("\n")
fmt.Println("--> Disk Usage for :", driveUsage)
partitionInfo, _ := disk.Partitions(true)
fmt.Printf("\n")
fmt.Println("--> Partitions :", partitionInfo)
folderInfo, _ := disk.IOCounters("C:", "D:")
//fmt.Printf("\nDisk IO counter remaining\n")
fmt.Printf("\n")
fmt.Println("-->Disk IO counter :", folderInfo)
fmt.Printf("Docker remaining\n")
fmt.Printf("\n")
fmt.Println("-----------------Host--------------------------------->")
hostInfo, _ := host.Info()
fmt.Printf("\n")
fmt.Println("--> Host Info :", hostInfo)
/*userName, _ := host.Users()
fmt.Printf("\n")
fmt.Println("--> Username :", userName)*/
fmt.Println("-----------------Load--------------------------------->")
avgLoad, _ := load.Avg()
fmt.Printf("\n")
fmt.Println("--> Average Load :", avgLoad)
avgMisc, _ := load.Misc()
fmt.Printf("\n")
fmt.Println("--> Misc :", avgMisc)
fmt.Println("-----------------RAM--------------------------------->")
virtMemory, _ := mem.VirtualMemory()
fmt.Printf("\n")
fmt.Println("--> Virtual Memory :", virtMemory)
swapMemory, _ := mem.SwapMemory()
fmt.Printf("\n")
fmt.Println("--> Swap Memory :", swapMemory)
//fmt.Println("Process running list")
//processList()
}
SO - Windows 10, Linguagem de Programação - Golang
11
Evidência anedótica: quando abro o "monitor de atividade" em meus computadores, ele fica em ~ 70% da CPU por um segundo ou dois. Estou inclinado a acreditar que é o mais otimizado possível. Talvez, a coleta dessas métricas consuma muito tempo / ciclo.
—
Sergio Tulentsev 22/01
Por que você faz tudo
—
Mad Wombat
reflect.TypeOf
no início? Alguma coisa melhora se você pular essas?
Medir, perfilar, otimizar, repetir. Essa é a única solução para problemas de desempenho.
—
Adrian
@ MadWombat Eu tenho que remover algumas coisas para aprender sobre o tipo de dados do processador, memória.
—
gadhvi 23/01