AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / ubuntu / 问题 / 1230150
Accepted
Thomas Browne
Thomas Browne
Asked: 2020-04-24 23:59:57 +0800 CST2020-04-24 23:59:57 +0800 CST 2020-04-24 23:59:57 +0800 CST

Ubuntu 20.04 上的 ZFS 是否使用大量内存?

  • 772

我安装了 64GB,但 htop 显示正在使用 20GB:

在此处输入图像描述

运行ps aux | awk '{print $6/1024 " MB\t\t" $11}' | sort -n为我提供了最大的进程,只使用了 100 兆字节,加起来整个输出只有 2.8GB ( ps aux | awk '{print $6/1024}' | paste -s -d+ - | bc)。这或多或少是我从昨天升级的 Ubuntu 19.04 中得到的——在没有应用程序运行时使用 3 到 4GB。那么为什么在 htop 上使用 20GB 呢?

现在确实我已经安装了 ZFS(总共 1.5 GB 的 SSD 驱动器,在 3 个池中,其中一个是压缩的),并且我一直在移动一些相当大的文件,所以我可以了解是否有一些缓存分配。htop Mem 条主要是绿色的,这意味着“内存正在使用”,而不是缓冲区(蓝色)或缓存(橙色),所以它非常令人担忧。

这个 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 --> 似乎与创建大文件有关

我重新启动,内存使用量约为 5GB。即使在 Firefox 中运行一堆标签,运行一些虚拟机,占用 RAM 高达 20GB,然后关闭所有应用程序,它会降到 5GB。然后我在 Python 中创建了一个大文件(1.8G 的随机数 CSV),然后将其连接到自身 40x 以生成一个 72GB 的文件:

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 install numpy)将一次分配大约 1GB 直到它失败。根据下面的答案,一旦你运行它,内核内存就会被释放,所以我能够在它被杀死之前分配 64 GB(我只有很少的交换)。换句话说,它确认 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
ram zfs 20.04
  • 4 4 个回答
  • 13217 Views

4 个回答

  • Voted
  1. Best Answer
    Colin Ian King
    2020-04-25T00:51:13+08:002020-04-25T00:51:13+08:00

    ZFS 将缓存数据和元数据,因此 ZFS 将使用大量可用内存。当内存压力开始出现时(例如,加载需要大量页面的程序),缓存的数据将被清除。如果您有大量可用内存,它将被用作缓存,直到需要为止。

    您可以使用该arc_summary工具查看 ZFS ARC(自适应替换缓存)使用的资源

    • 23
  2. max
    2020-11-08T05:59:18+08:002020-11-08T05:59:18+08:00

    默认情况下,最多 50% 的系统 RAM 分配给 Ubuntu 20.04 上的 ZFS。如果其他进程需要,ZFS 会释放 RAM,但这需要一些时间。例如,我因此在 Virtualbox VM 上尝试了一些冻结。

    如果您无法升级 RAM,一个简单的解决方案是限制 ZFS 使用的 RAM。首先检查当前分配了多少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 Gb 的限制)
    • 保存并退出
    • sudo update-initramfs -u
    • sudo reboot

    希望能帮助到你!

    • 4
  3. HubertNNN
    2021-08-12T03:31:51+08:002021-08-12T03:31:51+08:00

    ZFS 的称为 ARC 的缓存被计为应用程序内存(htop 中的绿色条),
    而不是缓存(htop 中的黄色条)。

    这是一个已知的错误https://github.com/openzfs/zfs/issues/10255
    ,由于早期实施中的一些困难引起的。

    尽管它看起来像应用程序内存,但它的行为就像一个缓存
    (在内存压力的情况下它会下降),
    因此无需担心它。

    • 3
  4. Travisdh1
    2020-04-26T06:56:04+08:002020-04-26T06:56:04+08:00

    UNIX/Linux 中的所有存储系统都将使用所有可用的空闲内存,当任何 RAM 可用时,它们可以添加缓存。有没有也没关系。ZFS、LVM、ext、xfs,这就是内核的设计方式。根据用于查看可用内存的程序,会导致很多混乱。top 通常会显示所有分配的内存,包括用于 IO 缓存的内存,而 free 不会。自计算机诞生之初就让人们感到困惑。

    • -1

相关问题

  • 将文件移动到 /dev/shm ramdisk 不会增加 RAM 使用率?

  • 为什么 Ubuntu 只显示 3GB 的 RAM?

  • 如何找出计算机系统具有的 RAM?[复制]

  • 在不重新启动服务器的情况下物理检查内存?

  • 如何检查我的 RAM 和硬盘驱动器是否有错误?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    如何运行 .sh 脚本?

    • 16 个回答
  • Marko Smith

    如何安装 .tar.gz(或 .tar.bz2)文件?

    • 14 个回答
  • Marko Smith

    如何列出所有已安装的软件包

    • 24 个回答
  • Marko Smith

    无法锁定管理目录 (/var/lib/dpkg/) 是另一个进程在使用它吗?

    • 25 个回答
  • Martin Hope
    Flimm 如何在没有 sudo 的情况下使用 docker? 2014-06-07 00:17:43 +0800 CST
  • Martin Hope
    Ivan 如何列出所有已安装的软件包 2010-12-17 18:08:49 +0800 CST
  • Martin Hope
    La Ode Adam Saputra 无法锁定管理目录 (/var/lib/dpkg/) 是另一个进程在使用它吗? 2010-11-30 18:12:48 +0800 CST
  • Martin Hope
    David Barry 如何从命令行确定目录(文件夹)的总大小? 2010-08-06 10:20:23 +0800 CST
  • Martin Hope
    jfoucher “以下软件包已被保留:”为什么以及如何解决? 2010-08-01 13:59:22 +0800 CST
  • Martin Hope
    David Ashford 如何删除 PPA? 2010-07-30 01:09:42 +0800 CST

热门标签

10.10 10.04 gnome networking server command-line package-management software-recommendation sound xorg

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve