tmpfs vs. /tmp vs. ramfs
| 文件系统 | 是否使用 RAM | 是否能交换到 Swap | 数据持久化 | 主要用途 |
|---|---|---|---|---|
| tmpfs | ✅ 是 | ✅ 是 | ❌ 否 | 临时存储,高速缓存 |
| /tmp | ⭕ 可能是 | ⭕ 可能是 | ❌ 否 | 系统临时文件 |
| ramfs | ✅ 是 | ❌ 否 | ❌ 否 | 纯内存存储,更快但无上限 |
tmpfs 是 基于 RAM 的临时文件系统,适用于高频读写的数据(如缓存、临时文件)。tmpfs 目录 重启后数据会丢失,但速度极快,适用于 NGINX 日志、缓存、临时存储 等。可以手动挂载 tmpfs,或者让 NGINX 代理缓存、日志写入 tmpfs,降低磁盘 IO 压力。
如果要用 tmpfs 降低磁盘 IO
你可以 手动创建一个 tmpfs 目录,用于存放 NGINX 日志、缓存或临时文件,比如:
1. 用 tmpfs 存储 NGINX 日志
如果你希望 NGINX 的 access.log 和 error.log 写入内存,而不是磁盘,可以这样做:
sudo mkdir -p /var/log/nginx-tmp
sudo mount -t tmpfs -o size=512M tmpfs /var/log/nginx-tmp
这是指定了大小,如果文件过多,可能会造成性能下降!
然后修改 NGINX 配置:
nginx复制编辑
access_log /var/log/nginx-tmp/access.log;
error_log /var/log/nginx-tmp/error.log;
这样日志就不会频繁写入磁盘,减少 IO 压力。
让 tmpfs 开机自动挂载
如果你希望 /var/log/nginx-tmp 每次开机自动挂载 tmpfs,可以编辑 /etc/fstab:复制编辑
tmpfs /var/log/nginx-tmp tmpfs defaults,size=512M 0 0
#然后执行
sudo mount -a
这样,每次重启服务器,tmpfs 都会自动挂载。
但是我的内存足够大,都好几十G,特别适合那些不需要永久化的数据,例如缓存文件等
那我肯定要用ramfs
ramfs是一个 基于内存 的文件系统,不会对存储大小做任何限制,文件的大小只受到系统内存的限制。ramfs不会使用交换空间(swap),如果内存满了,系统会变得不稳定,甚至崩溃。- 数据存储在内存中,数据会丢失(没有持久性)。
其实这个很容易解决,重启解决烦恼,哈哈
需要考虑的风险
- 内存占用:
- 由于
ramfs没有大小限制,它会一直占用内存直到手动清理。如果内存不够,可能会导致系统卡顿或崩溃。因此,你需要确保内存足够处理高并发的直播流。
- 由于
- 数据丢失:
ramfs中的数据会丢失(没有持久化),如果系统重启或内存溢出,缓存的数据会消失。对于某些重要的缓存数据,可能需要考虑备份或其他存储机制。
- 监控和调优:
- 使用
ramfs后,你需要对内存使用情况进行严格监控,确保系统不会因为内存溢出而变得不稳定。
- 使用
如何使用 ramfs 存储 HLS 直播流 ,HLS 因为高强度的文件读写,非常适合这个
- 挂载
ramfs: 假设你打算把 HLS 分片存储在/mnt/hls,可以使用以下命令: sudo mkdir -p /mnt/hls#创建/mnt/hls 文件夹sudo mount -t ramfs ramfs /mnt/hls#挂载所有在/mnt/hls下的文件将存储在内存中,包括子目录,数据非永久化。- 调整内存使用(可选): 如果你希望限制内存占用,可以通过
size参数限制ramfs的大小:bash复制编辑sudo mount -t ramfs -o size=4G ramfs /mnt/hls这样ramfs将限制为 4GB 的内存。 - 配置 NGINX 或其他流媒体服务: 修改你的 NGINX 或流媒体服务配置,将 HLS 分片存储路径指向
/mnt/hls,例如:nginx复制编辑location /hls/ { root /mnt/hls/; ... } - 监控和优化: 定期检查内存使用情况,避免内存过载导致系统崩溃:
free -h - 开机自动挂载目录
- sudo nano /etc/fstab #编辑配置文件
- ramfs /mnt/hls ramfs defaults 0 0 #放置在文件内容末尾
- 保存配置文件,即可实现自动开机挂载
- mount | grep ramfs 验证输出结果
总结
ramfs存储 HLS 直播流 可以带来更快的读写速度和更低的延迟,非常适合高并发的直播应用。- 但也要小心 内存管理,避免内存溢出造成系统不稳定。
- 如果你不希望内存占用过高,
tmpfs是一个更为灵活的选择,可以限制内存使用并避免溢出。


