问题
在下面的代码中,我有几个 Go 例程,我面临的一个问题是“calculateMemoryUsage()”Go 例程,其中每半秒计算一次平均内存使用量。出于某种原因,总数不断给我奇怪的值。这是打印日志:
Memory Usage: 162224
Average: 162224
Total: 162224
Iteration Count: 1
Memory Usage: 181200
Average: 171712
Total: 343424
Iteration Count: 2
Memory Usage: 187864
Average: 119858
Total: 359576
Iteration Count: 3
正如所见,从第三次迭代开始,平均值出现了混乱,因为总数没有正确添加。调试后,我看到内存使用情况读取良好,但总似乎给我带来了问题。我怀疑 GC,但是在这个问题中,LastGC 的值设置为 0,这意味着没有执行 GC。任何建议将不胜感激!:)
代码
func main() {
db, err := sql.Open("mysql", "<credentials_removed>@@tcp(127.0.0.1:3306)/rts")
err = db.Ping()
if err != nil {
panic(err.Error()) // proper error handling instead of panic in your app
}
showStocksChannel := make(chan bool)
showBestPerformingChannel := make(chan bool)
go calculateMemoryUsage()
go showStocks(showStocksChannel, db)
go changeStockPrices(showStocksChannel, showBestPerformingChannel, db)
go displayBestPerformingStocks(showBestPerformingChannel, db)
showStocksChannel <- true
select{}
}
func calculateMemoryUsage() {
var averageMemoryUsage uint64 = 0
var iterations uint64 = 0
var usage uint64 = 0
var total uint64 = 0
for iterations <= 200 {
var memoryStats runtime.MemStats
runtime.ReadMemStats(&memoryStats)
iterations = iterations + 1
usage = memoryStats.Alloc
total = (averageMemoryUsage + usage)
averageMemoryUsage = total / iterations
fmt.Printf("\nMemory Usage: %v\nAverage: %v\nTotal: %v\nIteration Count: %v\n\n", usage, averageMemoryUsage, total, iterations)
time.Sleep(time.Millisecond * 1000)
//fmt.Printf("\nLast GC: %v\nNext GC: %v\n\n", memoryStats.LastGC, memoryStats.NextGC)
}
fmt.Printf("\nAverage Memory Usage: %v bytes\n\n", averageMemoryUsage)
}
缥缈止盈
相关分类