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
应该是某个程序吃掉了所有的内存,只能重启
随机推荐
- 使用Openresty构建认证网关
[入门]使用Openresty构建认证网关 lwhile关注 0.5092017.10.07 16:00:03字数 1,330阅读 4,112 在单体应用中, 我们可以通过 cookie + sess ...
- laravel开发调试工具laravel-debugbar的安装
一.使用 Composer 安装该扩展包 composer require barryvdh/laravel-debugbar --dev 二.(可选)修改配置文件app/config.php Lar ...
- 手写Vuex源码
Vuex原理解析 Vuex是基于Vue的响应式原理基础,所以无法拿出来单独使用,必须在Vue的基础之上使用. 1.Vuex使用相关解析 main.js import store form './s ...
- LVS+Keepalived 实现高可用负载均衡
前言 在业务量达到一定量的时候,往往单机的服务是会出现瓶颈的.此时最常见的方式就是通过负载均衡来进行横向扩展.其中我们最常用的软件就是 Nginx.通过其反向代理的能力能够轻松实现负载均衡,当有服务出 ...
- jieba尝鲜
import jieba strings = '我工作在安徽的安徽师范大学,这个大学很美丽,在芜湖' # print(dir(jieba)) dic_strings = {} lst_strings ...
- Django学习路16_获取学生所在的班级名
在 urls.py 中先导入getgrades from django.conf.urls import url from app5 import views urlpatterns = [ url( ...
- PHP array_diff() 函数
实例 比较两个数组的值,并返回差集: <?php $a1=array("a"=>"red","b"=>"gree ...
- PHP quotemeta() 函数
实例 在预定义的字符前添加反斜杠: <?php高佣联盟 www.cgewang.com$str = "Hello world. (can you hear me?)";ech ...
- PDOStatement::fetchObject
PDOStatement::fetchObject — 获取下一行并作为一个对象返回.(PHP 5 >= 5.1.0, PECL pdo >= 0.2.4)高佣联盟 www.cgewang ...
- x86架构:保护模式下利用中断实现抢占式多任务运行
站在用户角度考虑,一个合格的操作系统即使在单核下也能 "同时" 执行多个任务,这就要求CPU以非常快的频率在不同任务之间切换,让普通人根本感觉不到任务的切换.windwo ...