2015-09-03 2 views
0

В Go, при использовании грим заявление, , например, выделяющий мегабайтов памятиКак определить доступную память перед макияжем() заявление

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

Есть ли способ, чтобы определить, сколько памяти свободно, прежде чем просить больше памяти?

+5

Нет, и это не помогло бы, если бы были. Редизайн вашего решения. – Volker

+6

№. Что доступно для использования, зависит от ядра и может измениться в тот момент, когда вы его запросите. – JimB

+2

Также обратите внимание, что ядра некоторых популярных операционных систем все равно будут относиться к вашему процессу о реальном объеме доступной памяти - это называется [«overcommiting»] (https://www.google.com/search?q=linux + overcommit). – 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) 
} 

Есть также много способов, чтобы получить эту информацию, которые являются OS-специфичны. Ни один из них не идеален, но они вам что-то дадут.

Вы также можете использовать Max Memory в качестве переменной конфигурации и использовать: http://godoc.org/runtime#MemStats.

+2

Взаимосвязь между тем, что сообщает 'mem.VirtualMemory', и как большой размер, который вы можете передать' make' без его провала, в лучшем случае является незначительным. Также обратите внимание, что виртуальная память часто * много * больше физической памяти. –

+0

'vm.Available' не имеет никакого отношения к тому, можно ли выделить или нет. * Если * сервер не имеет подкачки и * если * сервер перекомпоновал, и ничего не меняется между временем проверки и временем, когда вы запрашиваете память, а вызов 'make' вызывает расширение арены распределения, а ядро не жертвует другим процессом для вас тем временем, 'vm.Available' * может * коррелировать с нехваткой памяти. – JimB

1

Благодарим вас за все ваши данные.

Я решил использовать параметр конфигурации Max_Memory, поскольку для этого используется использование n мегабайт с объемом памяти до 75% на тестовых серверах, которые работают только с этим приложением, в качестве способа запускать автомасштабирование в тестовой среде.

Смежные вопросы