/tmp 与 /dev/shm 用于 Linux 上的临时文件存储?

Posted

技术标签:

【中文标题】/tmp 与 /dev/shm 用于 Linux 上的临时文件存储?【英文标题】:/tmp vs. /dev/shm for temp file storage on Linux? 【发布时间】:2012-04-02 11:15:41 【问题描述】:

我的脚本需要创建数百个快速连续的小型临时文件,并很快读回,然后取消链接。

我的测试显示,即使在中等负载下,在 Linux 上将所述文件放入 /tmp(到磁盘)或 /dev/shm(文件系统级共享内存)中,性能差异也很小。我将此归因于文件系统缓存。

授予磁盘最终会受到文件系统操作的影响,但是在多个小的读写临时文件上,您为什么(不)推荐/dev/shm 而不是磁盘支持的目录?您是否注意到共享内存目录在缓存 VFS 上的性能大幅提升?

【问题讨论】:

【参考方案1】:

/dev/shm 用于非常特殊的目的,而不是用于任意程序放入的文件。

相比之下,/tmp 是 exactly made for this。在我的系统上,/tmp 也是 tmpfs,而 /var/tmp 是 designed 用于放置更大的文件,可能会保留更长时间。

【讨论】:

+1 /dev/shm 是一个通用的tmpfs 是Linux 的实现细节,无论如何都不能保证(可用空间通常非常有限)。将/tmp/var/tmp 用于它们的用途。并且根据使用情况和文件系统,如果您创建和取消链接一个文件,它可能只会在缓存中,并且永远不会命中磁盘。 @ephemient - 文件创建并立即取消链接,即使缓存最终会命中磁盘,不是吗? @glglgl - 在我们正在部署的系统上(在托管服务场景中)/tmp 不是由tmpfs 支持,而是由主 sda1 磁盘支持。否则,我同意保持标准,但这是我们目前的部署环境。 什么是“特殊目的”? @tkarls 使用shm_open(3),您可以请求创建一个特殊的“共享内存”对象。一些实现(或一般的 Linux?)使用/dev/shm 来放置创建的对象。【参考方案2】:

本质上是一样的(当你有交换文件时,磁盘也隐式支持 shm)。

/tmp 的优点是它更难填满(考虑到您的硬盘可能比您的交换文件大)。并且得到了更广泛的支持。

【讨论】:

以上是关于/tmp 与 /dev/shm 用于 Linux 上的临时文件存储?的主要内容,如果未能解决你的问题,请参考以下文章

linux下的/dev/shm/及对Oracle 的影响

Linux 一键配置 Oracle 主机 /dev/shm

Linux 一键配置 Oracle 主机 /dev/shm

Linux 一键配置 Oracle 主机 /dev/shm

/dev/shm

Linux下的tmpfs文件系统(/dev/shm)