我们生产的渠道对接系统出现大量推送运营商信息失败的现象。问题最终定位到 mongo 身上:
.00:03:05.425 [http-nio-9100-exec-53] ERROR c.d.r.s.i.CarrierOpRepServiceImpl - 
存储运营商数据失败,Timeout waiting for a pooled item after 120000 MILLISECONDS; 
nested exception is com.mongodb.MongoTimeoutException: 
Timeout waiting for a pooled item after 120000 MILLISECONDS
org.apache.catalina.valves.ErrorReportValveinvoke(ErrorReportValve.java:79)
冰冻三尺非一日之寒,其实 mongo 的问题早已暴露出来:基本信息的推送经常出现超时,前边也已定位到 mongo 操作比较慢这里,推送的成败完全看 mongo 的心情。耽搁于其他事情一时没抽出时间来慎重处理,如今运营商信息推送大量失败忽然爆发,mongo 的问题不得不提前排上处理日程。
首先想到的当然是 mongo 的慢查询,但查看 mongo 日志,很少有超过 150 ms 的 sql 语句。
其次想到的是系统资源吃紧,比如 CPU、内存利用率过高,因为我们的那台机器上同时部署有 nginx、mongo、mysql、java 等。但这个只能说是硬件限制,换句话说,完全可以靠垂直扩展硬件来提升你的系统性能——只要你有足够的钱。但最大限度的利用硬件资源是每个系统设计师应尽的职责所在。
根据笔者的经验,任何恶劣的生产问题,始终会有一个始作俑者的点(问题的制造者),然后各种问题(如内存、CPU、I/O 以及其他,问题的受害者)集中爆发出来,然后系统运维人员被卷入其中而被各种乱象所惑而无从下手——笔者之前就碰到过一位资深 IT 处理这种问题的时候找不到要领所在,而去统计、处理各种问题受害者,完全南辕北辙了。生产事故发生时,作为处理人员应该保持头脑的冷静,综合分析找到问题的制造者,一击制敌。
再次,查看问题爆发时的 mongo 连接数,已上升至 100 多个,再往后受限于整个系统的内存情况无法再升,造成上述 Timeout waiting for a pooled item 等待问题。
最后,查看整个 mongo 库数据大小、出问题的 mongo 的那张表及索引空间大小,库大小 20 G,单表几百兆,索引不到表数据空间的一半。这种级别的数据量莫说 mongo,就是 mysql 也不会有任何问题。
综上总结信息:mongo 没有慢查询,大量连接将 mongo 连接数占满而迟迟不释放,大量操作在等待连接池以致超时造成无法存储的生产故障
问题到了这里,大家应该能够分析到问题出在 mongo 结果集传输上了——大量的大的对象的传输受限于带宽限制长久占据着 mongo 连接——该应用里的 mongo 存储的是一些大的基本信息、运营商报文,笔者在系统空闲时用 MongoChef (配外网 ip 访问)根据 id 查询一条基本信息就耗用了近半分钟,事实上该条 sql 的执行只是几个毫秒级别的。

去查看该应用的 spring data mongodb 连接池配置,果然配的是外网。修改为内网 IP 访问,问题迎刃而解,这才是峰值到来时 mongo 应有的表现:

一次应用访问数据库 IP 配成外网 IP 引发的血案相关推荐

  1. 路由器局域网IP(内网IP)和外网IP的关系

    本文转载自:http://wenku.baidu.com/view/16007a6e783e0912a2162a36.html 我们家里经常会有路由器,只要交点钱向服务商申请个账号,密码,再登上路由器 ...

  2. 微信公众号开发之如何将本机IP映射成外网域名

    最近一个项目需要用到微信公众号的网页授权登录,在研究这个公众号的时候遇到各种困难,现将自己的一些心得总结一下. 我想进行微信公众号开发遇到的第一个困难就是微信公众号必须输入一个外网可以访问的域名,在网 ...

  3. (SVN笔记)https外网IP端口映射内网IP端口访问SVN服务端

    目录 1.前言 2.花生壳优点与相关技术 3.设置SVN服务器 4.外网IP映射内网IP访问SVN Server 5.总结 1.前言         上一章介绍了局域网内https服务端配置与客户端联 ...

  4. 内网IP外网IP的关联及访问互联网原理

    首先解释一下"内网"与"外网"的概念: 内网:即所说的局域网,比如学校的局域网,局域网内每台计算机的IP地址在本局域网内具有互异性,是不可重复的.但两个局域网内 ...

  5. 什么是内网和外网?什么是内网IP和外网IP?本地连接和宽带连接又有什么区别?

    今天,有很多小伙伴被何为内网外网迷糊?究竟什么是内网?什么是外网?他们又有和区别?还有什么是内网IP和外网IP?本地连接和宽带连接有什么区别?怂怂今天就来给大家科普一下吧: 问题一.何为内外网及定义诠 ...

  6. 如何查看外网ip_内网ip和外网ip的联系以及连接过程

    我们每天都会访问各种各样的网站,比如淘宝,百度等等.不免会思考,我们的设备是如何连接上这些网址的呢?要想搞清楚这个问题,首先就得先搞清楚内网ip和外网ip的联系. 一.网络结构 如图,假设我们的计算机 ...

  7. Android 通过外网IP定位城市

    Android 通过外网IP定位城市 获取外网IP /*** 通过CmyIP获取获取外网外网地址 需在异步线程中访问* @return 外网IP*/ public static String getO ...

  8. 【2023亲测可用】JS 获取电脑本地IP 和 电脑网络IP(外网IP|公网IP)

    1.了解:电脑本地的IP地址(内网IP)和电脑本机在网络上的IP地址(外网IP|公网IP) 在运行窗口输入"cmd",在弹出的界面里输入"ipconfig/all&quo ...

  9. 内网ip和外网ip的联系以及连接过程

    我们每天都会访问各种各样的网站,比如淘宝,百度等等.不免会思考,我们的设备是如何连接上这些网址的呢?要想搞清楚这个问题,首先就得先搞清楚内网ip和外网ip的联系. 一.网络结构 如图,假设我们的计算机 ...

最新文章

  1. ggplot2笔记9:绘图需要的数据整理技术
  2. fatal: You are not currently on a branch. 问题解决
  3. break、continue和return的使用
  4. 2022版全球及中国煤矿机械再制造行业“十四五”发展规划与投资建议报告
  5. 找出指定范围的回文数C++代码实现
  6. C++轮子队-第三周(需求改进原型设计)
  7. jaVa游戏三国志英杰传,《三国志英杰传》到底是怎样的一款游戏
  8. python2中xrange比range优点_【Python面试】 说说Python中xrange和range的区别?
  9. 3-2 :eq(index)过滤选择器
  10. CardLayout使用
  11. Adobe弄的flex质量也太差了
  12. 拓端tecdat|matlab贝叶斯隐马尔可夫hmm模型实现
  13. python简单的爬虫实例
  14. linux 传真 邮件,基于Linux的传真系统(转)
  15. android的sd卡分区,AndroidSD卡做磁盘分区图文教程
  16. 原生js写简易别踩白块儿
  17. C++图书ISBN码校验
  18. vue集成环信Web IM
  19. 使用PHP的http请求客户端guzzle如何添加请求头
  20. treeset可以重复吗_买了好几份意外险,可以重复理赔吗?

热门文章

  1. 更换头像功能(前端)
  2. Ogre Giles
  3. R语言(R studio)画各类统计图形
  4. JS判断pc mobile几种方式
  5. Pastiche Master: Exemplar-Based High-Resolution Portrait Style Transfer
  6. 如何把一个文件压缩成几个固定大小的文件及解压缩
  7. Spring面试题(2022最新版)
  8. asp.net mvc如何设置起始页
  9. 安装夜深模拟器无法打开或进度条一直卡住解决方法
  10. 利用随机森林对特征重要性进行评估 方法一