如何主動釋放 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
相關文章
- vector 的記憶體釋放記憶體
- XCode釋放記憶體XCode記憶體
- 記憶體的分配與釋放,記憶體洩漏記憶體
- win10如何設定自動釋放記憶體_win10怎麼設定自動清理系統垃圾釋放記憶體Win10記憶體
- 怎麼手動在rstudio中釋放記憶體?記憶體
- Linux系統手動釋放記憶體快取Linux記憶體快取
- golang 釋放記憶體機制的探索Golang記憶體
- C# 垃圾回收釋放記憶體C#記憶體
- 如何在Mac上釋放記憶體?Mac清除RAM教程Mac記憶體
- .Net記憶體管理釋放的兩種方式記憶體
- C/C++記憶體分配以及釋放C++記憶體
- vector clear() 方法 記憶體釋放問題記憶體
- Vector() 記憶體釋放 不得不說的故事記憶體
- C++ vector 釋放記憶體的兩種方法C++記憶體
- C++ - 二級指標動態記憶體申請與釋放C++指標記憶體
- .NET 記憶體管理兩種有效的資源釋放方式記憶體
- Chrome 再次最佳化記憶體佔用問題,新增記憶體釋放開關Chrome記憶體
- CPU和記憶體如何互動的記憶體
- 什麼是Java記憶體模型(JMM)中的主記憶體和本地記憶體?Java記憶體模型
- C/C++使用malloc為結構體陣列分配記憶體(及free釋放記憶體)的三種方法C++結構體陣列記憶體
- iOS 解決設定rootViewController 記憶體不釋放問題iOSViewController記憶體
- dll內申請的記憶體可以由呼叫它的程式釋放嗎?記憶體
- 【記憶體管理】Oracle如何使用ASMM自動共享記憶體管理記憶體OracleASM
- win10為硬體保留的記憶體怎麼釋放 win10取消為硬體保留的記憶體怎麼操作Win10記憶體
- linux結束處於Tl狀態的程序,釋放記憶體資源Linux記憶體
- C語言記憶體管理,分配、使用、釋放以及安全性C語言記憶體
- 誰建立誰銷燬,誰分配誰釋放——JNI呼叫時的記憶體管理記憶體
- Rust記憶體安全解釋Rust記憶體
- Redis刪除大量key後,佔用的系統記憶體卻沒有釋放?Redis記憶體
- CVE-2018-4990 Acrobat Reader堆記憶體越界訪問釋放漏洞分析BAT記憶體
- OpenResty 和 Nginx 的共享記憶體區是如何消耗實體記憶體的RESTNginx記憶體
- redis的記憶體滿了之後,redis如何回收記憶體嗎Redis記憶體
- Redis4.0如何自動清理記憶體碎片Redis記憶體
- 動態記憶體分配記憶體
- Android 記憶體抖動Android記憶體
- 如何檢視linux系統中空閒記憶體/實體記憶體使用/剩餘記憶體Linux記憶體
- 【記憶體管理】Oracle AMM自動記憶體管理詳解記憶體Oracle
- Java的記憶體 -JVM 記憶體管理Java記憶體JVM