Мне установили 64 ГБ, но htop показывает используемых 20 ГБ:
Выполнение ps aux | awk '{print $6/1024 " MB\t\t" $11}' | sort -n
дает мне, самые большие процессы с помощью только нескольких 100 мегабайтов и сложение целого вывода только получают меня к 2.8 ГБ. Это более или менее, что я получал с Ubuntu 19.04, из которой я обновил вчера - 3 - 4 ГБ, используемые, когда никакие приложения не работают. Итак, почему используется 20 ГБ на htop?
Теперь это верно, что я установил ZFS (общие 1,5 ГБ твердотельных дисков, в 3 пулах, один из которых сжат), и я перемещал некоторые довольно большие файлы вокруг, таким образом, я мог понять, было ли некоторое выделение кэша. htop панель Мадам является главным образом зеленой, что означает "память, используемую" в противоположность буферному (синему) или кэшу (оранжевому), таким образом, это вполне касается.
Этот ZFS израсходовал много RAM, и если так, это выпустит некоторых, если для других приложений будет нужен он?
Вот вывод smem:
tbrowne@RyVe:~$ smem -tw
Area Used Cache Noncache
firmware/hardware 0 0 0
kernel image 0 0 0
kernel dynamic memory 20762532 435044 20327488
userspace memory 2290448 519736 1770712
free memory 42823220 42823220 0
----------------------------------------------------------
65876200 43778000 22098200
Таким образом, это - "динамическая память ядра", это - преступник. Почему так?
Я перезагрузил, и Использование оперативной памяти было приблизительно 5 ГБ. Даже выполняя набор тегов в Firefox, выполняя несколько VMs, беря RAM до 20 ГБ, затем закрывая все приложения это роняло к 5 ГБ. Затем я создал большой файл в Python (1.8G случайного числа CSV), затем связал это к себе 40x для создания файла на 72 ГБ:
tbrowne@RyVe:~$ python3
Python 3.8.2 (default, Mar 13 2020, 10:14:16)
[GCC 9.3.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import numpy as np
>>> import pandas as pd
>>> pd.DataFrame(np.random.rand(10000, 10000)).to_csv("bigrand.csv")
>>> quit()
tbrowne@RyVe:~$ for i in {1..40}; do cat bigrand.csv >> biggest.csv; done
Теперь после того, как это все сделано, и ничто работающее на машине, я имею 34G используемый ядром!
Этот сценарий python 3 (Вы должны к pip3 установить numpy), выделит приблизительно 1 ГБ за один раз, пока он не перестал работать. И согласно ответу ниже, как только Вы выполняете его, память ядра освобождена так, я смог выделить 64 ГБ, прежде чем это было уничтожено (у меня есть очень мало подкачки). Другими словами, это подтверждает, что ZFS освободит память, когда это будет необходимо.
import numpy as np
xx = np.random.rand(10000, 12500)
import sys
sys.getsizeof(xx)
# 1000000112
# that's about 1 GB
ll = []
index = 1
while True:
print(index)
ll.append(np.random.rand(10000, 12500))
index = index + 1
ZFS будет кэшировать данные и метаданные так, учитывая большое количество свободной памяти, это будет использоваться ZFS. Когда давление памяти начинает возникать (например, загружая программы, которые требуют большого количества страниц), кэшированные данные будут выселены. Если у Вас будет много свободной памяти, то она будет использоваться в качестве кэша, пока она не будет требоваться.
Можно использовать arc_summary
инструмент для наблюдения ресурсов, используемых ARC ZFS (адаптивный заменяющий кэш)
ВСЕ системы хранения в UNIX/Linux будут использовать всю доступную свободную память, которую они могут добавить кеш, когда доступно любое количество ОЗУ. Неважно, если это. ZFS, LVM, ext, xfs — это просто то, как было спроектировано ядро. Приводит к большой путанице в зависимости от программы, используемой для просмотра доступной памяти. top часто показывает всю выделенную память, включая то, что используется для кеша ввода-вывода, тогда как free этого не делает. Смущает людей с первых дней вычислений.
По умолчанию в Ubuntu 20.04 до 50% системной оперативной памяти отводится для ZFS. ZFS освобождает оперативную память, если это необходимо другим процессам, но это занимает некоторое время. Например, из-за этого я экспериментировал с некоторыми зависаниями виртуальных машин Virtualbox.
Если вы не можете увеличить объем оперативной памяти, простое решение — ограничить объем оперативной памяти, используемой ZFS.Сначала проверьте, сколько в настоящее время выделено с помощью arc_summary
Значения выражены в битах, но вы можете конвертировать их на http://www.matisse.net/bitcalc/?input_amount=3&input_units=gigabits¬ation=legacy
Затем:
sudo nano /etc/modprobe.d/zfs.conf
(это нормально, если файл еще не существует)options zfs zfs_arc_max=3221225472
(например, чтобы установить ограничение в 3 гигабита)sudo update-initramfs -u
sudo reboot
Надеюсь поможет!