tmpfs适用于纯临时、无状态、重建耗时低的Session场景,因其数据驻内存、微秒级延迟、重启自动清除,但需严格限制大小并确保会话可快速重建。
直接把 session 目录挂成 tmpfs,能将读写延迟压到微秒级,特别适合云原生 web 集群中高频、可丢、重建快的会话场景——但关键不是挂上就完事,而是挂得稳、小、准、可管。
确认 Session 是否真适合放内存
tmpfs 只适用于纯临时、无状态、重建耗时
- 排除强依赖磁盘持久性的服务:检查是否硬编码路径、是否含未落盘的业务中间状态(如订单支付临时锁)
- 运行 fuser -v /var/run/session_cache 或 lsof +D /var/run/session_cache,确保无进程正锁定该目录
- 清空前先备份:rsync -a /var/run/session_cache/ /backup/session_pre_tmpfs/,再 rm -rf /var/run/session_cache/*
- 重启服务验证:reload 或 restart 后,观察日志是否正常写入、无 “Permission denied” 或 “No such device” 报错
挂载必须带四要素:size、mode、uid/gid、nr_inodes
只写 mount -t tmpfs tmpfs /var/run/session_cache 是高危操作,极易引发 OOM 或权限混乱。
- size=值:按峰值预估,例如每秒生成 800 个 2KB Session 文件,30 秒窗口最多占 48MB,建议设 size=128M(留 2–3 倍余量)
- mode=1755:启用 sticky bit,防止不同用户进程误删他人 Session 文件
- uid/gid:与 Web 进程属主对齐,如 Nginx 用 uid=www-data,gid=www-data;Gunicorn 用 uid=1001,gid=1001
- nr_inodes=50k:防小文件撑爆 inode(Session 多为千字节级文件,极易触发 inode 耗尽)
示例命令:
sudo mount -t tmpfs -o size=128M,mode=1755,uid=1001,gid=1001,nr_inodes=50k tmpfs /var/run/session_cache
开机自动 + 安全兜底配置
临时挂载在重启后失效,生产环境必须写入 /etc/fstab,并做内存防护。
- 在 /etc/fstab 中添加一行(严格用 Tab 分隔):
tmpfs /var/run/session_cache tmpfs defaults,size=128M,mode=1755,uid=1001,gid=1001,nr_inodes=50k 0 0 - 执行 sudo mount -a 测试语法,无输出即成功
- 建议加 swap_mode(内核 5.1+ 支持):内存紧张时自动换出部分页面,避免整机 OOM
- 配合 cgroups 限制对应服务内存上限,例如:
systemctl set-property nginx.service MemoryMax=1G
验证真实水位与日常盯控
别信 df 显示的“已用 100%”——那是逻辑分配量,不是真实 RAM 占用。
- 看真实内存消耗:grep Shmem /proc/meminfo(Shmem 字段反映所有 tmpfs 总用量)
- 查单点状态:df -hT /var/run/session_cache 确认类型是 tmpfs;mount | grep session_cache 核对挂载选项
- 实时盯增长:watch -n 1 'find /var/run/session_cache -type f | wc -l' + df -h /var/run/session_cache
- 基准对比:用 wrk -t4 -c200 -d30s http://localhost/session-check 对比挂载前后 p95 延迟变化


















