如何主動釋放 HeapIdle 的記憶體
最近發現部署在 k8s 的 go 服務記憶體一直在漲,最後 OOM 被 kill 了,百思不得其解。於是寫這個程式驗證,發現 go 不會主動釋放 HeapIdle 的記憶體,但這部分的記憶體是被 k8s 認為是 go 使用的。
package main
import (
"fmt"
"runtime"
"runtime/debug"
"time"
)
func main() {
var a []int
for i := 0; i < 200; i++ {
a = make([]int, i*100000)
}
a = nil
fmt.Printf("%v\n", a)
for {
m := runtime.MemStats{}
d := debug.GCStats{}
runtime.ReadMemStats(&m)
debug.ReadGCStats(&d)
fmt.Printf("%v\t%v\t%v\n", d.NumGC, m.HeapIdle/1024/1024, m.HeapInuse/1024/1024)
time.Sleep(time.Second)
}
}
更多原創文章乾貨分享,請關注公眾號
- 加微信實戰群請加微信(註明:實戰群):gocnio
相關文章
- Linux釋放記憶體及手動釋放Oracle共享記憶體段Linux記憶體Oracle
- vector 避免記憶體頻繁分配釋放與手動釋放vector記憶體記憶體
- FireFox記憶體自動釋放Firefox記憶體
- vector 的記憶體釋放記憶體
- Linux之 手動釋放記憶體Linux記憶體
- Linux下如何釋放cache記憶體Linux記憶體
- 記憶體的分配與釋放,記憶體洩漏記憶體
- 如何釋放linux cache佔用的記憶體Linux記憶體
- XCode釋放記憶體XCode記憶體
- linux釋放記憶體Linux記憶體
- win10如何設定自動釋放記憶體_win10怎麼設定自動清理系統垃圾釋放記憶體Win10記憶體
- Linux手動釋放快取記憶體Linux快取記憶體
- 正確釋放Vector的記憶體記憶體
- 轉 linux 記憶體釋放Linux記憶體
- Linux釋放cache記憶體Linux記憶體
- linux 記憶體釋放命令Linux記憶體
- golang 釋放記憶體機制的探索Golang記憶體
- Linux系統手動釋放記憶體快取Linux記憶體快取
- 怎麼手動在rstudio中釋放記憶體?記憶體
- 如何在Mac上釋放記憶體?Mac清除RAM教程Mac記憶體
- C# 垃圾回收釋放記憶體C#記憶體
- 二維陣列的動態記憶體分配和釋放 (轉)陣列記憶體
- .Net記憶體管理釋放的兩種方式記憶體
- 手動釋放linux下cache所佔用的實體記憶體Linux記憶體
- 記憶體動態分配與釋放,malloc和new區別記憶體
- vector clear() 方法 記憶體釋放問題記憶體
- C/C++記憶體分配以及釋放C++記憶體
- mongodb釋放記憶體-切換日誌MongoDB記憶體
- Linux系統釋放cache記憶體Linux記憶體
- Vector() 記憶體釋放 不得不說的故事記憶體
- C++ vector 釋放記憶體的兩種方法C++記憶體
- android釋放記憶體的一個辦法Android記憶體
- 記錄一下,linux釋放記憶體的方法Linux記憶體
- C/C++記憶體釋放應注意的問題C++記憶體
- 高質量的C程式碼.釋放記憶體 薦記憶體
- C++ - 二級指標動態記憶體申請與釋放C++指標記憶體
- 共享記憶體段未釋放導致資料庫記憶體被耗盡記憶體資料庫
- 簡單分配和釋放記憶體指令碼[更新]記憶體指令碼