ZFS на Ubuntu 20.04 с помощью тонны памяти?

Мне установили 64 ГБ, но htop показывает используемых 20 ГБ:

enter image description here

Выполнение 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 

Таким образом, это - "динамическая память ядра", это - преступник. Почему так?

РЕДАКТИРОВАНИЕ 2->, кажется, связано с огромным созданием файла

Я перезагрузил, и Использование оперативной памяти было приблизительно 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 используемый ядром!

enter image description here

ЗАКЛЮЧИТЕЛЬНОЕ РЕДАКТИРОВАНИЕ (для тестирования ответа)

Этот сценарий 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
4
задан 24 April 2020 в 20:25

3 ответа

ZFS будет кэшировать данные и метаданные так, учитывая большое количество свободной памяти, это будет использоваться ZFS. Когда давление памяти начинает возникать (например, загружая программы, которые требуют большого количества страниц), кэшированные данные будут выселены. Если у Вас будет много свободной памяти, то она будет использоваться в качестве кэша, пока она не будет требоваться.

Можно использовать arc_summary инструмент для наблюдения ресурсов, используемых ARC ZFS (адаптивный заменяющий кэш)

14
ответ дан 25 April 2020 в 10:40

ВСЕ системы хранения в UNIX/Linux будут использовать всю доступную свободную память, которую они могут добавить кеш, когда доступно любое количество ОЗУ. Неважно, если это. ZFS, LVM, ext, xfs — это просто то, как было спроектировано ядро. Приводит к большой путанице в зависимости от программы, используемой для просмотра доступной памяти. top часто показывает всю выделенную память, включая то, что используется для кеша ввода-вывода, тогда как free этого не делает. Смущает людей с первых дней вычислений.

-1
ответ дан 25 April 2020 в 14:56

По умолчанию в 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

Надеюсь поможет!

3
ответ дан 7 November 2020 в 13:59

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

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