Проверьте доступную память в Linux

Я пишу сценарий Python, который загружает 4K видео и играет их по запросу. Когда моя память устройства выходит за предел 7,2 ГБ, она удаляет видео с наименьшим количеством количества представлений.

Используя бесплатную команду или вершину управляют, чтобы я мог получить информацию памяти. Но а именно, как я использовал общую память? Так, чтобы я мог возвратить это функции Python для сравнения порогу памяти.

7
задан 8 August 2018 в 15:02

3 ответа

Percentage использовал память (исключая буферы и кэш):

free | awk 'FNR == 3 {print $3/($3+$4)*100}'

Для Вашего вопроса Вы добавили: "выше 7,2 гигабайтов", но я предположил бы, что процент мог бы быть более гибким.


Чтобы подробно остановиться на этом, то же может использоваться для "свободной памяти процента":

free | awk 'FNR == 3 {print $4/($3+$4)*100}'

awk инструмент сканирования шаблона с загрузками и загрузками параметров. FNR является входным рекордным числом в текущем входном файле. В основном строка, которая в настоящее время обрабатывается. Таким образом, FNR просканирует для 3-й строки, где числа - то, что Вы хотите. 3$ и 4$ указывают на 3-й и 4-й столбец. Если Вы хотите само число, используйте:

free | awk 'FNR == 3 {print $3}'
free | awk 'FNR == 3 {print $4}'

Пример:

$ free
             total       used       free     shared    buffers     cached
Mem:      16419996   16144316     275680          0     447220   12589412
-/+ buffers/cache:    3107684   13312312
Swap:     16761852      38532   16723320
~$ free | awk 'FNR == 3 {print $3}'
3109056
~$ free | awk 'FNR == 3 {print $4}'
13311240

Если Вы хотите с буферами и кэшем: FNR=2. Если Вы хотите подкачку, FNR=4.

10
ответ дан 23 November 2019 в 06:09

Можно также считать источник freeинформация, /proc/meminfo:

~ head /proc/meminfo
MemTotal:        4039168 kB
MemFree:         2567392 kB
MemAvailable:    3169436 kB
Buffers:           81756 kB
Cached:           712808 kB
SwapCached:            0 kB
Active:           835276 kB
Inactive:         457436 kB
Active(anon):     499080 kB
Inactive(anon):    17968 kB

В Python, например:

with open('/proc/meminfo') as file:
    for line in file:
        if 'MemFree' in line:
            free_mem_in_kb = line.split()[1]
            break

получит Вас свободная память в КБ в free_mem_in_kb переменная. С чем-то подобным для общей памяти можно вычесть значения (или сложить буферы, кэшируемые, и т.д.).

Вы могли также создать словарь значений в файле:

from collections import namedtuple
MemInfoEntry = namedtuple('MemInfoEntry', ['value', 'unit'])

meminfo = {}
with open('/proc/meminfo') as file:
    for line in file:
        key, value, *unit = line.strip().split()
        meminfo[key.rstrip(':')] = MemInfoEntry(value, unit)

Затем получите значения с meminfo['MemAvailable'].value, например.

17
ответ дан 23 November 2019 в 06:09

muru заинтриговал меня, чтобы использовать его в классе декоратора для измерения потребления памяти функцией.

class memoryit:

    def FreeMemory():
        with open('/proc/meminfo') as file:
            for line in file:
                if 'MemFree' in line:
                    free_memKB = line.split()[1]
                    return (float(free_memKB)/(1024*1024))    # returns GBytes float

    def __init__(self, function):    # Decorator class to print the memory consumption of a 
        self.function = function     # function/method after calling it a number of iterations

    def __call__(self, *args, iterations = 1, **kwargs):
        before = memoryit.FreeMemory()
        for i in range (iterations):
            result = self.function(*args, **kwargs)
        after = memoryit.FreeMemory()
        print ('%r memory used: %2.3f GB' % (self.function.__name__, (before - after) / iterations))
        return result

Функция измерения потребления:

@memoryit
def MakeMatrix (dim):
    matrix = []   
    for i in range (dim):
        matrix.append([j for j in range (dim)])
    return (matrix)

Использование:

print ("Starting memory:", memoryit.FreeMemory()) 
m = MakeMatrix(10000)    
print ("Ending memory:", memoryit.FreeMemory() )

Распечатка:

Starting memory: 10.58599853515625
'MakeMatrix' memory used: 3.741 GB
Ending memory: 6.864116668701172
2
ответ дан 14 April 2020 в 19:31

Другие вопросы по тегам:

Похожие вопросы: