1 回答

TA貢獻2039條經驗 獲得超8個贊
當前穩定的 Go (1.10) 只有一個旋鈕,可用于通過 Go 運行時執行的垃圾收集來交換內存以降低 CPU 使用率。這個旋鈕叫做GOGC
,它的描述是
該
GOGC
變量設置初始垃圾收集目標百分比。當新分配的數據與上次收集后剩余的實時數據的比率達到此百分比時,將觸發收集。默認值為GOGC=100
。設置GOGC=off
完全禁用垃圾收集器。該runtime/debug
包的SetGCPercent
功能允許在運行時更改此百分比。
因此,基本上將其設置為200
將使正在運行的進程的 Go 運行時可能使用的內存量增加一倍。
話雖如此,我會注意到 Go 運行時實際上會嘗試將其垃圾收集器的行為調整為您正在運行的程序的工作負載和手頭的 CPU 處理能力。我的意思是,通常情況下你的程序不消耗大量 RAM 并沒有什么問題——如果收集器恰好以足夠快的速度清除垃圾而不會顯著影響性能,我認為沒有理由擔心:Go 的 GC 是其中之一在運行時進行了最激烈的微調,實際上效果很好。
因此,您可以嘗試采用另一條路線:
分析程序的內存分配。分析配置文件并嘗試找出熱點在哪里,以及是否(以及如何)優化它們。
優化。通常,這相當于使某些緩沖區可在對使用它們的相同函數的不同調用之間重復使用,預分配切片而不是逐漸增加它們,在認為有用的
sync.Pool
地方使用等。這些措施實際上可能會增加真正使用的內存(即,活動對象——而不是垃圾),但它可能會降低 GC 的壓力。
- 1 回答
- 0 關注
- 114 瀏覽
添加回答
舉報