我需要为大约 10 GB 的数据设置一个内存存储系统,其中包含许多 100 kb 的单个文件(图像)。将会有大量的读取和相当周期性的写入(添加新文件,删除一些旧文件)。
现在,我知道tmpfs 的行为就像一个常规文件系统,例如,您可以使用df检查空闲/已用空间,这是一个很好的功能。但是,我感兴趣的是ramfs是否会在 IO 操作的速度方面提供一些优势。我知道在使用ramfs时我无法控制消耗的内存大小,并且如果它完全消耗可用 RAM,我的系统可能会挂起,但这在这种情况下不会成为问题。
总而言之,我感兴趣:
- 性能方面,哪个更快:ramfs或tmpfs(可能是为什么)?
- tmpfs 什么时候使用交换空间?它是否将已保存的数据移动到交换(为当前正在运行的其他程序释放 RAM)或仅在那时没有可用 RAM 时才移动新数据?
我没有 open_basedir,php 可以访问 /etc /usr /proc /home 等......但不能访问 /tmp。
tmpfs 安装在 /tmp (/tmp type tmpfs (rw)) 这也是我想使用 /tmp 文件夹的原因。
我的文件归 http(nginx 和 php 的用户)所有,每个人都可以阅读。
sudo -u http cat /tmp/file 正在运行,但 php 脚本中的任何内容都不起作用(如 file_exist() 或 file())。
编辑:日志中显示的错误:
PHP Warning: file(/tmp/ydlw/pid): failed to open stream: No such file or directory in /srv/http/ydlw/status.php on line 267
Run Code Online (Sandbox Code Playgroud)
编辑2:我以另一种方式测试了这个问题。我做了
touch("/tmp/boo");
file_exist("/tmp/boo");
Run Code Online (Sandbox Code Playgroud)
和 file_exist 返回 true 以便创建文件。然后我在 /tmp 里面看了看,在那里找不到“boo”文件。这就是我所害怕的,php 看不到挂载点。为什么会这样,我该如何解决?
在 Ubuntu Precise 上,我的 /run 空间不足:
admin@foo:~$ df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda1 19G 6.6G 12G 38% /
udev 10M 8.0K 10M 1% /dev
none 50M 40M 11M 79% /run
none 5.0M 0 5.0M 0% /run/lock
none 249M 0 249M 0% /run/shm
Run Code Online (Sandbox Code Playgroud)
我应该分配更多吗?如何?
编辑:这是我的 fstab:
admin@foo:~$ cat /etc/fstab
proc /proc proc defaults 0 0
/dev/sda1 / ext3 defaults,errors=remount-ro,noatime 0 1
/dev/sda2 none swap sw 0 0
Run Code Online (Sandbox Code Playgroud) 我有 Linux 服务器,并且有一个备用的 500GB 磁盘分区。我想格式化它并将其用于/tmp。服务器偶尔会运行一些大数据处理任务,因此 /tmp 可能会保存 GB 的临时数据。
然后我有了一个想法,我可以将它添加为交换分区,然后将 /tmp 挂载到 tmpfs。这个想法合理吗?
服务器有 6GB 的 RAM,因此在大多数情况下 /tmp 上的数据只会在 RAM 中,具有明显的速度优势。问题是,如果 /tmp 上有 10-20GB 的数据,系统将如何执行?与简单地将 /tmp 挂载到 ext4 分区相比,性能如何?感谢帮助。
编辑:很明显,当 tmpfs 的使用量达到 RAM 限制时,系统将开始换出内存。但是 Linux 是否足够智能以换出 tmpfs 数据并将“常规”数据保存在 RAM 中?如果是,那么我想它的行为是合理的。如果没有,那么整个系统将受到严重影响。
我正在寻找有关安装 tmpfs 分区和同步选项的信息。同步使数据被转储到磁盘而不被保存在缓存中。这适用于 ext4 和其他文件系统。我想知道即使是 tmpfs 分区也需要指定同步选项,还是默认启用它,因为它是 RAM 分区。在我的选择中,如果将 ramdisk 缓存在 RAM 中会很奇怪。
tmpfs /tmp tmpfs defaults,sync,noatime,nosuid,nodev,noexec,mode=0777,size=400M 0 0
在 tmpfs 分区中是否默认启用同步?
我在 CentOS 服务器上运行了大量应用程序,并且我看到了奇怪的内存行为。这是一个 munin 图的快照:

正如您所看到的,提交的内存量逐渐增加,导致交换文件被使用。让我感到奇怪的是,非活动内存的数量也在不断增长。我的理解是,非活动内存实际上是操作系统已释放但尚未清理并放回空闲内存池中的内存。似乎内存不足是由于缺乏清理造成的,但我可能是错的。
你能给出一些提示来找出问题的原因和/或让 CentOS 回收不活动的内存吗?
谢谢。
一些额外的信息:
1) 我在 /tmp 上安装了一个 tmpfs 并且存储在那里的文件数量增加了(但它是非活动内存量的两倍)。
2) cat /proc/meminfo(在图像的后期)给出:
MemTotal: 14371428 kB
MemFree: 1207108 kB
Buffers: 35440 kB
Cached: 4276628 kB
SwapCached: 785316 kB
Active: 9038924 kB
Inactive: 3902876 kB
HighTotal: 0 kB
HighFree: 0 kB
LowTotal: 14371428 kB
LowFree: 1207108 kB
SwapTotal: 10223608 kB
SwapFree: 6438320 kB
Dirty: 627792 kB
Writeback: 0 kB
AnonPages: 7844560 kB
Mapped: 49304 kB
Slab: 146676 kB
PageTables: 27480 kB
NFS_Unstable: 0 kB …Run Code Online (Sandbox Code Playgroud) 既然tmpfs只存在于内存中,它会像内存一样变得碎片化吗?是否有机制可以自动对内存进行碎片整理,从而提高(甚至略微提高)存储文件的访问速度?
我的网站最大的问题是全天有 4 个备份时段,其中负载不可避免地会超过 50。
我正在使用 nice 和 ionice 来尝试减少影响,但效果有限。
因为我在备份完成后立即将备份复制到 S3 存储桶,然后删除文件,所以我想知道是否可以创建基于内存的磁盘?
我通常有 25GB 的可用内存(我超出了规格),我未压缩的 db 是 17GB,我的压缩是 6GB。我使用 xtrabackup 流并压缩。
如果流是内存而不是磁盘,我认为这会减轻整个系统的大量负载。
这看起来可行吗?
编辑 1类似 tmpfs 的东西。https://en.wikipedia.org/wiki/Tmpfs
我试图找出我的系统中到底是什么使用了交换内存。免费报告使用的交换内存超过 5GB,但所有进程仅使用 24MB 的交换内存。我怀疑交换可能被 tmpfs 文件系统使用,但我不知道如何检查它。
您能告诉我还应该检查什么来检查交换内存的内容吗?
# free -m
total used free shared buffers cached
Mem: 48206 47688 518 8177 10 11789
-/+ buffers/cache: 35888 12317
Swap: 15999 5378 10621
Run Code Online (Sandbox Code Playgroud)
来自 /proc/*/status 的 VmSwap
# grep "VmSwap:" /proc/*/status | awk '{swapped+=$2} END {print swapped/1024" MB"}'
23.8438 MB
# grep "VmSwap:" /proc/*/status | grep -v " 0 kB"
/proc/1/status:VmSwap: 52 kB
/proc/27714/status:VmSwap: 956 kB
/proc/27718/status:VmSwap: 948 kB
/proc/27722/status:VmSwap: 820 kB
/proc/27723/status:VmSwap: 804 kB
/proc/27724/status:VmSwap: 812 kB
/proc/27725/status:VmSwap: 804 kB
/proc/29636/status:VmSwap: …Run Code Online (Sandbox Code Playgroud)我有一个创建大型临时文件的脚本。
我倾向于使用tmpfs的这个,但是我做了tmpfs的性能快速搜索,发现这其中报告速度约2GiB /秒。
现代 NVME SSD 具有相当的速度。撇开性能以外的差异(例如,通过不接触磁盘来延长 SSD 寿命,SSD 更大而 RAM 有限),与 SSD 相比,使用 tmpfs 是否有任何性能优势?
tmpfs ×10
linux ×5
memory ×3
filesystems ×2
performance ×2
swap ×2
tmp ×2
centos ×1
centos7 ×1
php ×1
ramdisk ×1
ssd ×1
ubuntu-12.04 ×1