问题标签 [tmpfs]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
69 浏览

linux - 用磁盘而不是 RAM/SWAP 支持 tempfs

我想限制文件夹的大小,以便进程不能x MB向该文件夹写入更多数据。看起来它不可能在 linux 中为文件夹执行此操作,但可以在tempfs filesystem.

所以我可以创建一个 tempfs 文件系统并对其设置大小限制。

但是问题是tempfs由 RAM(和交换)支持的,这对于我的情况是不可接受的,因为我将用完磁盘空间。我可以用磁盘上的现有文件夹备份 tempfs 吗?

我想创建大约 50 个这样的目录,并为每个目录设置 500MB 的上限。

编辑1:以下命令有什么作用?

sudo mount -t tmpfs /tmp /tmp/mnt/aks2

我猜它会将文件夹/tmp挂载为 mountpoint /tmp/mnt/aks2。这是否意味着/tmp/mnt/aks2挂载点由 /tmp 文件夹而不是 RAM 支持?如果是,为什么 i -t tmpfs 在命令中?

0 投票
0 回答
189 浏览

performance - 某些文件的共享内存读/写速度很慢

最近我们看到我们的应用程序存在一些共享内存读/写性能问题。

在我们的应用程序中,我们将数据从共享内存/run/shm复制到固定内存,以实现更高的 GPU 传输吞吐量。我们观察到从不同文件(相同大小)复制时,复制速度是如此不同。

为了重现该问题,我们将相同的源文件复制到共享内存中的两个文件(即 file1、file2)中。然后我们通过计算将文件复制到/dev/null的时间来确认问题,结果如下。

我们检查了 meminfo,我们只使用了 50% 的内存。没有任何东西被换掉(我们明确地禁用了它)。

搜索了一圈,但无法确定问题所在。最后,我们重新启动系统,问题就消失了。

有谁知道可能是什么根本原因?

谢谢!

0 投票
2 回答
3563 浏览

unix - tmpfs docker 容器中没有足够的可用空间

我正在运行一个似乎内存不足的 docker 容器,我不知道如何解决这个问题。

我实际上是在这个 docker 容器上运行一个程序,它将图像下载到 tmpfs,执行一些操作,删除图像并返回结果。但是,似乎我遇到的图像太大而无法存储在我当前的 docker tmpfs 中。以下是df容器内 linux 命令的输出:

我已经尝试扩展 docker 的内存(因此两个 tmpfs 的值很大),但我仍然遇到这个问题。

我想我有几个问题:

1) 3 个独立的 tmpfs 文件系统有什么区别?它们为什么存在?

2)大概我需要扩大第一个 tmpfs 大小(小的)——我将如何去做呢?

最后,一些相关的系统信息:

操作系统——OSX

Docker 版本——Docker 版本 17.09.0-ce,构建 afdb6d4

让我知道您是否还有其他需要了解的内容!

感谢大家。

0 投票
1 回答
290 浏览

glibc - 磁盘已满时 fwrite 不会失败?

这是我写的一个测试程序

我试图将 /dev/shm 填满

跑了

我的 glibc

内核版本为 2.6.32-642.13.1.el6.x86_64

我了解此行为是由 fwrite 尝试将数据缓存在内存中引起的。(我试过 setvbuf(NULL...) 和 fwrite 立即返回失败)。但这似乎与定义有点不同

fwrite() 函数应返回成功写入的元素数,如果遇到写入错误,可能小于 nitems。如果 size 或 nitems 为 0,fwrite() 将返回 0 并且流的状态保持不变。否则,如果发生写入错误,则应设置流的错误指示符,应设置[CX] [Option Start] 和errno 来指示错误。[选项结束]

数据未成功写入磁盘,但其返回值为 1。未设置 errno。在这个测试用例中, fclose 捕获了失败。但它甚至可能被一个相当混乱的 ftell 函数捕获。

我想知道这是否发生在所有版本的 glibc 上,这是否会被认为是一个错误。

0 投票
1 回答
589 浏览

docker - 没有 tmpfs 的 Docker 临时卷

在不依赖像 tmpfs 这样的文件系统的情况下,是否支持临时 Docker 卷?

在我的用例中,容器上运行的应用程序需要写入大量数据,Docker 文档建议不要在这些场景中使用存储驱动程序,但是因为容器写入的数据可能会超过主机上的总可用 RAM,使用 tmpfs 将不得不增加交换大小并影响其他内存密集型操作的性能。

那么有没有其他方法可以获取内容与容器一起删除的卷?

另外需要注意的是,假设的解决方案必须通过 docker-compose v2 进行配置,因为这将与 Rancher 一起使用,它仅支持 docker-compose v1 和 v2

0 投票
0 回答
66 浏览

linux - 以编程方式检索内存放置的 tmpfs 的路径

我正在为基于 Linux 的系统编写一个应用程序,该应用程序大量使用临时文件用于 IPC 目的(锁、管道等),我想知道是否有任何规范的方法来获取临时文件的路径驻留在 RAM 内存中的系统(例如 /run)。到目前为止,我的解决方案是默认设置,/run除非设置了包含该位置路径的特定环境变量,但我想知道是否存在任何可用于获取此类信息的 API。否则,您最常用的方法是什么?

谢谢你。

0 投票
1 回答
597 浏览

python - 如何在“OSError:[Errno 28] No space left on device”失败时最好地处理 Scrapy 缓存?

如果 Scrapy 因异常而失败,建议采取什么措施:

OSError:[Errno 28] 设备上没有剩余空间

在这种特定情况下,使用限制为 128 MB 的 ramdisk/tmpfs 作为缓存磁盘,在 httpcache.FilesystemCacheStorage 上设置HTTPCACHE_EXPIRATION_SECS = 300

我可能错了,但我觉得 Scrapy 的FilesystemCacheStorage可能无法很好地管理它的缓存(存储限制)(?)

使用 LevelDB 会更好吗?

0 投票
1 回答
963 浏览

linux - 在 mmap 同一文件后删除 tmpfs(/dev/shm) 中的文件

我做了一些搜索,但没有找到类似的问题。这是我的步骤:

  1. 将文件复制到 /dev/shm (tmpfs)
  2. 用锁映射该文件
  3. 从该文件中读取数据
  4. 删除文件

第4步之后,之前加载的数据仍然可用,为什么?提前致谢

0 投票
1 回答
206 浏览

linux - shm_open 是否提交固定数量的物理内存?

我的一个朋友正在为内存受限的 Linux 系统开发一个库。他建议使用shm_open分配多个合理大小(16MB)的内存,用于跨用户机器上的多个不同程序的进程间通信。

出现的问题是,如果分配了很多缓冲区(例如 128),那么 128 × 16MB 可能是可用系统内存的重要部分,而且很有可能实际上不会有太多保留内存用过的。例如,如果每个缓冲区中只有 128K 的内存实际用于任何事情,那么这种方法将使用大约 1/128 的保留内存。由于预期的访问模式,在任何给定时间,每个缓冲区中可能只有一小部分区域是“热的”。

我查阅了 的手册页shm_open,其中特别提到了在 Linux 上,实现tmpfs用于分配的内存。手册页tmpfs反过来说,如果机器上存在物理内存压力,则可以调出分配的内存。它还说只分配存储文件系统已用内容所需的空间。

通过阅读本文,我假设以下情况属实:

  1. 使用shm_open分配 16MB 的空间不一定会立即消耗机器上的 16MB 物理内存,因为大多数文件系统将是零页,操作系统将延迟分配。使用的空间将与写入的数据量成正比。

  2. 如果机器上剩下的物理 RAM 很少,则允许操作系统从共享内存缓冲区中调出部分。此外,如果在任何时候只访问缓冲区的某些部分,那么假设这些区域(可能不是其他区域)将在给定时间被调入并不是不合理的。

这些假设合理吗?这原则上可以通过经验进行测试,但令人担忧的是,我们会遇到以下形式的问题:“是的,它适用于您的系统,但通常不适用于其他 Linux 安装。”</p>

0 投票
1 回答
2066 浏览

django - docker tmpfs seems to have no effect on postgresql

I have a Postgres database inside a docker container against which I run django tests. I want to improve the speed of the tests. The easiest way to do this (it seems to me) is to move postgres data into tmpfs volume.

Here's what I did:

Because I specified --tmpfs I expect the tests run significantly faster. Unfortunately this is not the case. The speed of the tests remains exactly on the same level (give or take 5%).

My questions is: why did the speed of the tests did not change? And what can I do about it ?

Extra info: