df卡死和fork:cannot allocate memory报错
早上到了公司,发现docker资源池的某一台主机根文件系统写满。
检查后发现该主机/data目录未挂载文件系统,直接放在了根目录下。于是联系业务方将应用迁移,联系主机工程师为/data挂载80G的存储空间。
接着顺便检查了其它资源池主机的磁盘分区上可使用的磁盘空间。使用df -h命令查询,结果直接hang死。
去其它主机执行df命令,同样全部hang死。
随后主机上Docker容器内跑的业务开始报错。
尝试检查/var/log/message系统日志,发现全部被业务的报错日志充斥,可读性很差。
最后服务器开始开始出现故障,ssh连接不上去。即使偶尔有人登录成功,执行任何命令都会提示:
-bash: fork: Cannot allocate memory
主机工程师只能前往机房将主机重启,结果重启后发现这台主机居然没有在/etc/fstab中配置/data目录自动挂载,重启后/data目录丢失,应用再次开始大规模报错。于是顺便检查了资源池的其它几台主机,发现有些主机/data目录未挂载、有些主机挂载后未配置开机自动挂载、有些主机/data目录挂载了但是自动挂载配的另一个文件系统、还有些主机密码不知道被谁改了只能重新刷密码,总之是问题多多。
首先联系业务方将日志输入级别改了,把输出到/var/log/message的日志全部停下。
然后检查日志;
查看内存发现主机内存仍然很充裕,不可能是内存耗尽引起的故障;
查看进程表,发现主机上有大量同PID、同PPID进程,而且还在疯狂增加,很快增加到十几万之多,很快意识到这些都是疯狂增加的线程,因为进程数和线程数疯狂增加,达到pid_max。经过验证确实pid_max用尽会导致fork问题。
于是查询出错时的操作记录,发现中午有人发布的新版本镜像,即问题所在。
虽然修改pid_max可以解决这个问题,但这只是治标不治本的方法。其实正常情况下pid_max完全够用,应该合理规划pid_max和thread_max的值.
df卡死其实是另一个故障了:使用strace df -h追踪出错原因,发现每次都在/proc/sys/fs/binfmt_misc处hang死。在/etc/mtab中可以查询到这个目录,但主机上实际不存在这个目录。
进入/proc/sys/fs执行ls命令,同样出现hang死。
于是重新配置好所有开机自动挂载信息,将所有出现故障的主机全部重启,该问题暂时解决。
最后提出的处理方法:

df卡死和fork:cannot allocate memory报错的更多相关文章
- 解决Zend OPcache huge_code_pages: mmap(HUGETLB) failed: Cannot allocate memory报错
前几日看到鸟哥介绍的 <让你的PHP7更快之Hugepage>, 于是想试试手给服务器加上,参照格式安装好扩展,调整好配置文件,然后重启php-fpm,结果启动一直报Zend OPcach ...
- -bash: fork: Cannot allocate memory 问题的处理
今天生产机器突然无法登录了,正好有一个用top挂着,但是退出top,执行任何命令都报-bash: fork: Cannot allocate memory,但是查看内存还是有很多空闲,然后在百度上查了 ...
- redis 写磁盘出错 Can’t save in background: fork: Cannot allocate memory (转)
查看 Redis 日志 发现系统在频繁报错: [26641] 18 Dec 04:02:14 * 1 changes in 900 seconds. Saving… [26641] 18 Dec 04 ...
- redis : Can't save in background: fork: Cannot allocate memory
redis : Can't save in background: fork: Cannot allocate memory JAVA程序报错信息: MISCONF Redis is configur ...
- -bash: fork: Cannot allocate memory
今天遇到服务器无法SSH,VNC操作命令提示fork:cannot allocate memory free查看内存还有(注意,命令可能要多敲几次才会出来) 查看最大进程数 sysctl kernel ...
- terminal Failed to fork(connot allocate memory)问题处理
今天遇到服务器无法SSH,VNC操作命令提示fork:cannot allocate memory free查看内存还有(注意,命令可能要多敲几次才会出来) 查看最大进程数 sysctl kernel ...
- Redis报错Can't save in background: fork: Cannot allocate memory及类似问题的处理方法
问题的发现及解决过程: 1.Redis主从复制(一主一从)环境在客户端用命令查看主从状态 在slave上输入命令显示如下: 在master上输入命令显示如下: 从显示可以看出主从关系出现问题,然后查看 ...
- 【ORACLE】ORA-27102: out of memory报错的处理
************************************************************************ ****原文:blog.csdn.net/clark_ ...
- 问题:Linux 输入任何命令都显示 -bash: fork: Cannot allocate memory
应该是某个程序吃掉了所有的内存,只能重启
随机推荐
- DVWA SQL 注入关卡初探
1. 判断回显 给id参数赋不同的值,发现有不同的返回信息 2. 判断参数类型 在参数后加 ' ,查看报错信息 数字型参数左右无引号,字符型参数左右有引号 4. 引号闭合与布尔类型判断 由于是字符型参 ...
- 使用 eval(input()) 的便利
输入列表或者字典时使用eval可以自动转换为其类型 2020-06-18
- Python os.statvfs() 方法
概述 os.statvfs() 方法用于返回包含文件描述符fd的文件的文件系统的信息.高佣联盟 www.cgewang.com 语法 statvfs()方法语法格式如下: os.statvfs([pa ...
- PHP ucfirst() 函数
实例 把 "hello" 的首字符转换为大写: <?phpecho ucfirst("hello world!");?> 运行实例 » 定义和用法 ...
- MediaStreamConstraints对象
MediaStreamConstraints对象作用是在调用getUserMedia()时用于指定应在返回的MediaStream中包括哪些轨道,以及(可选)为这些轨道的设置约束. 属性 audio布 ...
- C/C++编程笔记:C语言贪吃蛇源代码控制台(二),分数和食物!
接上文<C/C++编程笔记:C语言贪吃蛇源代码控制台(一),会动的那种哦!>如果你在学习C语言开发贪吃蛇的话,零基础建议从上一篇开始哦!接下来正式开始吧! 三.蛇的运动 上次我已经教大家画 ...
- 如果你大学上过编程课,一定被老师提醒过:不要使用 goto 语句!
如果你上过编程课,一定被老师提醒过:不要使用goto语句! 因为goto语句不仅让代码的可读性很差,随意的跳出还会给程序带来安全隐患. 但是这种几乎被现代编程明令禁止的语句,在计算机诞生之初却司空见惯 ...
- Android中Activity启动模式探索
Android中启动模式(launchMode)分为standard, singleTop, singleTask, singleInstance四种,可通过AndroidManifest.xml文件 ...
- Linux的VMWare中Centos7文件目录类命令
1.)ls命令简介 ls ---列出目前工作目录所含之文件及子目录 语法 ls [-alrtAFR] [name...] 参数 : -a 显示所有文件及目录 (ls内定将文件名或目录名称 ...
- 畅购商城(四):Lua、OpenResty、Canal实现广告缓存与同步
好好学习,天天向上 本文已收录至我的Github仓库DayDayUP:github.com/RobodLee/DayDayUP,欢迎Star,更多文章请前往:目录导航 畅购商城(一):环境搭建 畅购商 ...