2017-03-08 78 views
-2

我只是移植了一些代碼從C/C++去,這是一個微服務。它運行良好,甚至比在C/C++中更快。但是我有一個內存問題。分配5 GB的RAM,一個更緊湊的方式

當我的程序啓動時,將分配約4.5GB的RAM,並從光盤也處理數據的數據,同時加載,那麼它將爲天(希望月)運行填充它提供來自RAM的要求。不幸的是,在RAM中的數據處理和放置完成後,Go仍然會分配額外的3.5 GB RAM。我沒有做任何釋放,只有分配,我認爲我的程序在任何時候都沒有真正使用8 GB,所以我認爲Go只是獲取額外的RAM,因爲它「感覺到」我可能需要更快,但我不會。

,我讀了圍棋不允許任何功能取消分配未使用的RAM,使其返回到系統中。我想在同一臺機器上運行更多的服務,儘可能節省內存,所以幾乎和我真正使用的一樣浪費感覺不對。

那麼,如何保持內存佔用緊湊避免那些閒置的3.5 GB被轉到分配呢?

+0

請參閱相關的問題:[Golang - 無法釋放內存一度佔據bytes.Buffer(http://stackoverflow.com/questions/37382600/golang-cannot-free-memory-once-occupied-由字節緩衝器/ 37383604#37383604);和[生產中的FreeOSMemory()](http://stackoverflow.com/questions/42345060/freeosmemory-in-production/42345554#42345554)。 – icza

+0

你怎麼知道內存沒有被使用,或者如果它真的被分配而不僅僅是虛擬的大小? gctrace輸出是什麼樣的?什麼是實際的memstats顯示什麼分配? – JimB

+0

暗示,你不僅分配平坦'[4.5e6] byte'但你的數據結構更復雜一些「4.5GB的RAM,並會在加載數據填充它從盤也處理數據」。根據您提供的少量信息,建議您可以採取任何措施減少應用程序的內存佔用量,這是完全不可能的。 – Volker

回答