亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何讓 Go 程序使用更多內存?這是推薦的嗎?

如何讓 Go 程序使用更多內存?這是推薦的嗎?

Go
瀟湘沐 2023-04-17 15:16:16
我正在尋找類似于-XmxJava 的選項,即分配我的 Go 應用程序可以使用的最大運行時內存。正在檢查運行時,但如果那是要走的路,則不完全檢查。我嘗試用 func SetMaxStack() 設置這樣的東西,(可能非常愚蠢)debug.SetMaxStack(5000000000) // bytesmodel.ExcelCreator()我之所以要這樣做,是因為目前有足夠的 RAM 可用,但應用程序不會消耗超過 4-6%,我在這里可能是錯的,但它可能會迫使 GC 發生的速度比需要的快得多導致性能問題。我在做什么從 RDBMS 系統獲取大數據集,處理它以在 excel 中寫出。我尋找這樣一個選項的另一個原因是限制最終部署它的服務器上 RAM 的最大使用量。對此的任何提示將不勝感激。
查看完整描述

1 回答

?
largeQ

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 的壓力。


查看完整回答
反對 回復 2023-04-17
  • 1 回答
  • 0 關注
  • 114 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號