Mongodb---记一次事故故障

2014.06.19.001---故障报告


事故发生时间


事故简述


事故责任方


是否解决


19:21-20:15


IISserverD盘即将溢出


一、事故描写叙述

在19:21收到警报。显示IIS/Routerserver的D盘空间即将负荷。

二、事故处理过程:

1.  登录server查看后。发现router的日志非常大,有超过100G,导致无法打开。   决定,先重新启动router服务,删除日志。

2.  重新启动完成router后。日志又出现了猛刷的情况。进入查看,显示

2014-06-19T20:08:25.170+0800[conn8956] end connection 10.4.1.101:7389(100 connections now open)

2014-06-19T20:08:25.170+0800[mongosMain] connection accepted from    10.4.1.101:7390#8957 (101 connections now open)

2014-06-19T20:08:25.170+0800[conn8957]  authenticate db: minger   { authenticate: 1, user: "client",nonce: "xxx", key: "xxx" }

2014-06-19T20:08:25.170+0800[conn8957] end connection 10.4.1.101:7390(100 connections now open)

2014-06-19T20:08:25.170+0800[mongosMain] connection accepted from    10.4.1.101:7391#8958 (101 connections now open)

2014-06-19T20:08:25.170+0800[conn8958]  authenticate db: minger   { authenticate: 1, user: "client",nonce: "xxx", key: "xxx" }

2014-06-19T20:08:25.170+0800[conn8958] end connection 10.4.1.101:7391(100 connections now open)

2014-06-19T20:08:25.170+0800[mongosMain] connection accepted from    10.4.1.101:7392#8959 (101 connections now open)

2014-06-19T20:08:25.170+0800[conn8959]  authenticate db: minger   { authenticate: 1, user: "client",nonce: "xxx", key: "xxx" }

2014-06-19T20:08:25.170+0800[conn8959] end connection 10.4.1.101:7392(100 connections now open)

2014-06-19T20:08:25.186+0800[mongosMain] connection accepted from    10.4.1.101:7393#8960 (101 connections now open)

2014-06-19T20:08:25.186+0800[conn8960]  authenticate db: minger   { authenticate: 1, user: "client",nonce: "xxx", key: "xxx" }

3.  这个问题在阿里也一度遇到过,是因为阿里云的物理机的设置导致tcp请求 上不去。而出现这样的情况。

4.  将IIS的tcp pool关闭,mongodb的pool关闭。随机日志不再狂刷。

三、分析原因

Mongodb 驱动程序採用的连接池的方式连接到数据库,眼下从观察到的情况是应用一开启便依据变量的设置。建立所有连接。然后提供给程序使用,而且一旦当中某个连接到数据库的訪问失败,则会清空整个连接池到这台数据库的连接,并又一次建立连接。

而mongodb对中断连接的垃圾清理工作则是懒惰的被动清理方式,假设驱动程序端配 置的连接数过大。一旦发生重连,则会导致mongo端堆积大量的垃圾连接数据,导致主机资源耗尽。

windowsserver,timewaitdelay  最小值是30秒。而mongodb pool size 设为2000

也就是说。假设2000个连接里有一个由于网络关系断开了,就要又一次建立新的2000个连接,之前的2000个由于timewaitdelay的原因。临时还不能释放。假设在30秒内。由于网络原因,反复建立连,接导致将60000个port都用尽了。就会报错

可是既然耗尽了。为什么日志中显示一直有100个连接保持着呢?

对此,老大给出了一条非常重要的信息,C#中,关于连接池的代码中,设定最小值为100。对此我做出的猜想是。是否这100个链接用的是系统的1024个port中的100个?导致timewaitdelay不会涉及到这100个链接呢?尚待考证。

四、改进措施

1.  调整

MaxUserPort = 65534

MaxHashTableSize = 65536

MaxFreeTcbs = 16000

TcpNumConnections = 16777214

2.  将minpoolsize设为200,进行观察。

2014年06月20号

时间: 2024-11-10 14:34:58

Mongodb---记一次事故故障的相关文章

记一次存储故障导致数据库坏块处理过程

记一次存储故障导致数据库坏块处理过程 线上架构说明:     IBM DS4800存储一套     P560小机HA架构一套     两个数据库资源组平时run在HA架构中的任意一台中,资源组全部使用共享存储 问题描述: 由于存储在数据库运行过程中发生了异常宕机,导致两个库存在不同程度的坏块 错误信息及解决过程 数据库A: A:root:/db2dumph/istclhis > 2016-04-09-04.26.10.787138   Instance:istclhis   Node:000 P

记一次启动故障

记一次启动故障 Terrasse 2019.08.30 本机使用的是 Windows 10 Manjaro 双系统,今天从Win切换成Linux时出现了You are in emergency mode...等字样,无图形界面,提示登录后查看系统日志解决问题. 值得一提的是,我最开始差点没登录进去,原因是默认不开启 Numlock ,我以前是通过一个自动执行的命令开启的 Numlock,而今天系统启动失败,也就没有这个命令了.另外,我的终端默认是中文,在emergency mode下没有加载中文

记一次网络故障

好长时间没有静下心来写点东西了,今天就奢侈一会吧,听着音乐,把前几天遇到的一次网络故障回顾一下吧.首先声明我不是什么大神级别的网工,如果你想从我这篇文章里学习到什么很牛逼的技术的话,恐怕要让你失望了.我只是我. 这次实验室的网络故障,算是我接触计算机以来最折腾我的一次了吧.情况是这样的,应该是上周的周四吧,下午网络就不通了,右下角的电脑图标有一个黄色的感叹号.计算机接触了有3年了吧,知道这是怎么回事,在学校里,也经常遇到这样的问题,一般都是2天左右就好了.所以,就没怎么着急. 关于我们实验室,网

记一次kafka故障

故障现象:kafka有3个Partition分别为0,1,2,在实际运行中发现consumer只能收到Partition:0和Partition:1的数据,检查topic状态均正常.查找Partition::2的Leader为92,如下所示: 进一步检查92的server.properties配置文件,发现advertised.listeners字段没有填写,填上后便恢复正常.如果advertised.listeners没有填写,则相应的Partition是没有数据的. 原文地址:http://

记一次Raid故障磁盘故障恢复

由于业务服务器中一块硬盘有坏道,用硬盘哨兵检测软件检测,已经提示亮红叉了. 重启服务器进入阵列模式(ctrl+R),将坏盘强制下线,并拔出坏硬盘. 拔出后看阵列,其中有个盘显示为MISS状态. 情况一:将硬盘托架换上新硬盘,插入服务器 硬盘状态为Non-Raid模式,所以先将硬盘软换成Raid模式: 情况二:若插入硬盘后,状态显示为foreign则表示此盘含有其它阵列信息(当然可以通过import导入原阵列信息. 我们可以先把原阵列信息清除,再创建Raid. 这里我们选择CLEAR将原磁盘阵列信

记一次ss故障

本文主要参考: https://github.com/shadowsocks/shadowsocks shadowssocks 分为客户端和服务器端. 我们平时买的服务,使用是要用的是客户端. 如果你有钱买一台国外主机   是VPS,不是主机. (主机只能放东西,系统,服务器语言都是限定的,所以主机不能SSH远程连接,只能用FTP传文件.) 建议的VPS (Virtual Private Server) 推荐的有Digital Ocean  ,  Linode  , 个人感觉香港的VPS会不错,

记一次JVM故障排除

今天,自己开发的事件驱动的java大规模爬虫程序上线了几个新任务后突然异常. 异常: 程序业务异常,经查看CPU利用率满,内存满,一直报OOM,目测有内存泄露.如下图所示,四核16G的内粗,CPU高达400%,内存使用了 6G,刚好爆满,JVM启动参数为: java -server -Xmx6114M -Xms2048M -XX:+PrintGCDetails -XX:+PrintGCApplicationStoppedTime -Xloggc:/home/ubuntu/logs/spider/

记一次网络故障——pod间无法通信

一.背景 集群是二进制部署 部署完成后一起正常,各种资源对象均可正常创建. 部署应用后发现无法跨节点通信,且pod的ip都是172.17.0.0段的 二.排查过程层 查看节点路由,发现docker0网卡居然是172.17.0.0段(what?) 查找如下资料:基于docker的CNM部署flanel时,需要将/run/flannel/subnet.env作为docker的环境变量,且启动时指定flannel的网段信息 三.解决方案(修改配置文件:/usr/lib/systemd/system/d

记一次故障处理----主机异常关闭后mongodb二进制文件损坏

今天,在某个演示环境中,我们的产品经历过整个机房断电后,出现了mongodb二进制文件损坏,以下是故障的分析记录过程: 1.在客户处支撑的同事发现整个机房断电再恢复后,3个mongodb复制集中,有1个主机上的mongodb服务状态报错 2.登录后台发现复制集中每个mongodb主机上,mongod进程都在 3.在服务状态好着的mongodb主机上,通过mongo登录数据库,查询复制集状态,发现复制集状态正常,1个primary+2个secondary,并且optimeDate时间一致. 这个时