讲师中心 微信公众号
AI工具推荐 视频效率加速

/dev/shm 被塞满导致 Redis/PostgreSQL 崩溃的业务场景与限制方法

云浩酱_4650

云浩酱_4650

发布时间:2026-01-25 17:41:03

|

215人浏览过

|

来源于php中文网

原创

/dev/shm 空间耗尽会导致 Redis 和 PostgreSQL 崩溃,因其 RDB 快照、并行查询、WAL 共享内存等依赖该 tmpfs 文件系统;默认 64MB 容易被占满,引发 ENOSPC 错误,造成服务拒绝连接或退出。

/dev/shm 被塞满导致 redis/postgresql 崩溃的业务场景与限制方法

为什么 /dev/shm 满了会让 Redis 和 PostgreSQL 崩溃

Redis 默认用 fork() 做 RDB 快照,PostgreSQL 的并行查询、WAL 共享内存、甚至某些客户端连接(如使用 unix_socket_directories 时的 socket 文件)都可能依赖 /dev/shm。它本质是基于 tmpfs 的内存文件系统,默认大小通常只有 64MB(取决于内核版本和发行版),而 fork 时子进程会复制父进程的虚拟内存页(写时复制),但某些共享内存段(如 PostgreSQL 的 shared_memory_type = mmap 或 Redis 的 AOF rewrite 过程中临时缓冲)会直接在 /dev/shm 创建文件——一旦空间耗尽,open() 或 shm_open() 返回 ENOSPC,服务就卡在初始化或 checkpoint 阶段,表现为拒绝新连接、主从同步中断、甚至进程直接退出。

检查 /dev/shm 是否真成瓶颈

别只看 df -h /dev/shm,那只是 tmpfs 总大小;更要确认实际被哪些进程占用了:

  • 运行 ls -l /dev/shm/,重点关注以 redis、PostgreSQL、pg_、sem.、shmem. 开头的文件
  • 用 find /dev/shm -type f -size +1M -ls 找大文件
  • 查 Redis 日志是否含 Failed to open the temp file for AOF rewrite 或 Cannot allocate memory
  • 查 PostgreSQL 日志是否含 could not resize shared memory segment 或 out of memory(注意:这不一定是物理内存不足,可能是 shm 限额)

临时扩容与永久配置 /dev/shm 大小

临时改法立竿见影但重启失效;永久改法需配合挂载参数,且必须避开 systemd-tmpfiles 的覆盖逻辑:

Sentinal Redis
Sentinal Redis

监控Redis服务器健康状况、内存、性能及BullMQ队列。检查队列深度、失败任务,分析慢查询并诊断问题。

下载
  • 临时扩容(立刻生效):sudo mount -o remount,size=2G /dev/shm
  • 永久生效(推荐):编辑 /etc/fstab,把原 tmpfs /dev/shm tmpfs defaults 0 0 改成 tmpfs /dev/shm tmpfs defaults,size=2G 0 0,然后 sudo mount -o remount /dev/shm
  • 避免 systemd 干扰:确保 /usr/lib/tmpfiles.d/tmp.conf 或 /etc/tmpfiles.d/*.conf 中没有对 /dev/shm 的 d 或 Z 类型定义(它们会重置权限和大小)

更治本:让 Redis 和 PostgreSQL 少用 /dev/shm

扩容只是兜底,关键要减少对它的依赖:

  • Redis:设 stop-writes-on-bgsave-error no 只是掩盖问题;真正有效的是关掉 AOF(如果业务允许),或把 appendfilename 改到普通磁盘路径(AOF 文件本身不走 shm,但 rewrite 临时文件会);升级到 7.0+ 后可用 replica-announce-ip + replica-announce-port 避免某些 shm 通信路径
  • PostgreSQL:将 shared_memory_type 从默认的 mmap 改为 sysv(需重启),它用 System V IPC 而非 /dev/shm;同时调低 max_connections 和 work_mem,减少共享内存总需求
  • 通用:禁用不需要的扩展(如 pg_stat_statements 在高并发下会频繁写 shm)、定期清理僵尸 socket 文件(find /dev/shm -name "PostgreSQL.*" -mmin +60 -delete)

最常被忽略的是:容器环境里 /dev/shm 默认只有 64MB 且不会继承宿主机配置,docker run --shm-size=2g 或 Kubernetes 的 securityContext.shmSize 必须显式设置。

热门AI工具

更多
UpDream
UpDream Hot

一款AI视频创作工具,主要用于哔哩哔哩推出的自研AI视频创作工具,适合需要提升相关任务效率的用户。

超级简历WonderCV

一款AI办公效率工具,主要用于免费求职简历模版下载制作,应届生职场人必备简历制作神器,适合需要提升相关任务效率的用户。

花生AI
花生AI Hot

一款AI视频创作工具,主要用于B站推出的AI视频创作工具,适合需要提升相关任务效率的用户。

墨刀AI
墨刀AI Hot

一款AI图像与设计工具,主要用于产品经理的专属智能体,适合需要提升相关任务效率的用户。

Atoms
Atoms Hot

Atoms是一款AI智能体工具,第一支自动构建真实业务的 AI 团队。

咔片AIPPT

一款在线AI演示文稿制作工具,可根据主题和内容需求辅助生成PPT结构与页面,提高演示材料制作效率。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

相关专题

更多
scripterror怎么解决
scripterror怎么解决

scripterror的解决办法有检查语法、文件路径、检查网络连接、浏览器兼容性、使用try-catch语句、使用开发者工具进行调试、更新浏览器和JavaScript库或寻求专业帮助等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

1029

2023.10.18

500error怎么解决
500error怎么解决

500error的解决办法有检查服务器日志、检查代码、检查服务器配置、更新软件版本、重新启动服务、调试代码和寻求帮助等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

3280

2023.10.25

数据库Delete用法
数据库Delete用法

数据库Delete用法:1、删除单条记录;2、删除多条记录;3、删除所有记录;4、删除特定条件的记录。更多关于数据库Delete的内容,大家可以访问下面的文章。

3351

2023.11.13

drop和delete的区别
drop和delete的区别

drop和delete的区别:1、功能与用途;2、操作对象;3、可逆性;4、空间释放;5、执行速度与效率;6、与其他命令的交互;7、影响的持久性;8、语法和执行;9、触发器与约束;10、事务处理。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

1025

2023.12.29

k8s和docker区别
k8s和docker区别

k8s和docker区别有抽象层次不同、管理范围不同、功能不同、应用程序生命周期管理不同、缩放能力不同、高可用性等等区别。本专题为大家提供k8s和docker区别相关的各种文章、以及下载和课程。

785

2023.07.24

docker进入容器的方法有哪些
docker进入容器的方法有哪些

docker进入容器的方法:1. Docker exec;2. Docker attach;3. Docker run --interactive --tty;4. Docker ps -a;5. 使用 Docker Compose。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

6359

2024.04.08

docker容器无法访问外部网络怎么办
docker容器无法访问外部网络怎么办

docker 容器无法访问外部网络的原因和解决方法:配置 nat 端口映射以将容器端口映射到主机端口。根据主机兼容性选择正确的网络驱动(如 host 或 overlay)。允许容器端口通过主机的防火墙。配置容器的正确 dns 服务器。选择正确的容器网络模式。排除主机网络问题,如防火墙或连接问题。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

7477

2024.04.08

docker镜像有什么用
docker镜像有什么用

docker 镜像是预构建的软件组件,用途广泛,包括:应用程序部署:简化部署,提高移植性。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2953

2024.04.08

Docker Desktop怎么设置端口映射
Docker Desktop怎么设置端口映射

本专题聚焦Docker Desktop容器端口映射与访问配置,整理从创建容器、设置端口绑定到验证本地服务访问的操作流程。针对端口被占用、映射配置错误、容器服务无法访问等情况,也提供相应的检查方向,方便用户完成端口配置。

0

2026.11.03

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
phpEnv手册
phpEnv手册

共0课时 | 0人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn