2015-09-03 62 views
0

在走之前如何確定可用的內存,使用化妝聲明, 例如,分配的內存一個make()語句

make([]byte, 1024*1024*d) 

兆時,有沒有一種方法來確定多少內存是免費的,在尋求更多的記憶之前?

+5

不,如果有的話沒有幫助。重新設計解決方案。 – Volker

+6

不可以。可以使用的內容取決於內核,並可能在您請求它時進行更改。 – JimB

+2

另請注意,某些流行操作系統的內核無論如何都會對您的進程說謊可用內存的真實數量 - 這稱爲[「overcommitting」](https://www.google.com/search?q=linux +過量使用)。 – kostix

回答

0

是的。您可以使用gopsutil包:

package main 

import (
    "fmt" 

    "github.com/shirou/gopsutil/mem" 
) 

func main() { 
    vm, err := mem.VirtualMemory() 
    if err != nil { 
     panic(err) 
    } 
    fmt.Printf("Total:%d, Available:%d, Used:%d", vm.Total, vm.Available, vm.Used) 
} 

也有很多方法來得到這個信息是操作系統相關的。他們都不是完美的,但他們會給你一些東西。

您也可以將Max Memory作爲配置變量並使用:http://godoc.org/runtime#MemStats

+2

'mem.VirtualMemory'報告與你在沒有失敗的情況下可以傳遞給make的大小之間的關係最好是微不足道的。另請注意,虛擬內存通常比物理內存大很多*。 –

+0

'vm.Available'對你是否可以分配沒有真正的影響。 *如果*服務器沒有交換,並且*如果*服務器超限,並且在您檢查的時間和請求內存的時間之間沒有任何變化,並且'make'調用導致分配領域擴大,並且內核在此期間不會犧牲另一個進程,'vm.Available' *可能與內存耗盡相關。 – JimB

1

謝謝你的所有輸入。

我決定使用Max_Memory配置選項,因爲此用例用於在測試服務器上僅使用此應用程序的情況下,使用n兆字節的內存,最大可用的最大值爲75%,作爲在測試環境中觸發自動縮放。