线上事故复盘

前言
  • 前一次上线,当时正常,第二天发现有部分超时报警,最终发现应为Dubbo接口一次传输数据量太大导致线程虚拟内存占用
线上问题排查过程
  • 报警邮件中查询到有一部分接口超时量激增,查询定位到某个Dubbo接口,从服务器中top名查询如下:

  • 如上图显示dubbo项目进程CPU占用已经飙高到128%,并且不断在波动,一直维持在130%左右,初步推算是调用量激增导致Dubbo接口请求量变大,导致线程数量消耗,使用Arthas查询消耗CPU资源最多的前面几个线程如下图:
    图不见了: 反正CPU前几名都指向同一个Dubbo接口,命令 Thread -n 5, 查询CPU资源消耗最多的前五名

  • 查询对应Dubbo接口的请求数量,用Awk命令统计今天的请求量看是否增多如下:

  • 量居然这么小,因为是新的接口,只有部分功能使用,那么上面估计的请求量的问题应该不存在,但是CPU消耗的却很大,估计是因为耗时太长,在通过TOP命令查询,问题发现Men区域内核缓冲使用量很高39562828,比之空闲的物理内存379888高两个数量级

  • 量这么小的Dubbo接口能把交换区的资源耗尽,那问题就比较明显了,应该是每次处理的数据体量太大,内存不够,导致处理数据变慢,接口响应时间变慢,那之后就好查询了,继续更这个接口,看那部分信息有问题,发现在sql查询中查了一个这个字段,text类型,超级大,并且一次查出来的数据条数也比较大,导致最终Dubbo接口需要返回的数据量太多

`detail` text COMMENT '摘要',
  • 因dubbo协议采用单一长连接,如果每次请求的数据包大小为500KByte,假设网络为千兆网卡(1024Mbit=128MByte),每条连接最大7MByte(不同的环境可能不一样,供参考),单个服务提专供者的TPS(每秒处理事务数)最大为:128MByte / 500KByte = 262,单个消费者调用单个服务提供者的TPS(每秒处理事务数)最大为:7MByte / 500KByte = 14。
  • 如上名计算如果我数据量继续变得更大,但是没有超过Dubbo限制情况下,其实每次处理数据是非常消耗内存与IO的。
  • 最终修改将不必要字段去除,上线发布,耗时下降,内存信息,cpu都恢复正常,如下图:

记录一次线上超时异常查询相关推荐

  1. 线上一个数组查询遇到的坑

    背景 中午12点半,接到了线上MongoDB 数据库异常的告警通报: "CPU不间断飙升到百分百,业务也相应出现了抖动现象." 通过排查数据库主节点的日志,发现了这样的一个慢语句: ...

  2. 记录一次线上Mysql数据库迁移方案制定与实施

    前言 系统运行有很多年了. 数据库服务器也运行很多年了,性能比较老旧,SSD硬盘容量只有250G,在各种需求下,当前服务器的磁盘即将不足.所以开启了本次数据库的迁移行动. 需求 迁移的数据量高达130 ...

  3. 记录一次线上CPU负载过高的排查过程

    背景 一大早收到运维同学反馈.线上某台机器cpu的负载达到了97%以上,为了不影响机器上服务的正常运行,急需找到导致负载过高的原因并将负载降到合理的区间. 用到命令 top/uptime:查看负载情况 ...

  4. 线上 CPU100% 异常案例:一个正则表达式引发的血案

    前几天线上一个项目监控信息突然报告异常,上到机器上后查看相关资源的使用情况,发现 CPU 利用率将近 100%.通过 Java 自带的线程 Dump 工具,我们导出了出问题的堆栈信息. 我们可以看到所 ...

  5. php post请求超时,php用curl提交post数据,本地测试服务器OK,线上超时,需要如何排除问题?...

    本地服务器使用centos7.3,数据测试正常,线上服务器也是centos7.3,但是一直超时 使用postman或直接url地址访问线上服务器需要curl的地址能返回数据,但是用php的curl就不 ...

  6. 记录一次线上事故:GetConnectionTimeoutException: wait millis 60000, active 20, maxActive 20, creating 0

    前几天同事说项目出问题了,请求一直报错,我看了下服务器日志,发现服务器一直报错Caused by: com.alibaba.druid.pool.GetConnectionTimeoutExcepti ...

  7. 记录一次线上事故:SparkStreaming 写入 Hive 延迟

    精选30+云产品,助力企业轻松上云!>>> 点击蓝色"大数据每日哔哔"关注我 加个"星标",第一时间获取大数据架构,实战经验 背景: Hive ...

  8. 百度单测生成技术如何召回线上服务的异常问题?

    导读:线上系统异常问题一直以来都是使人"闻风丧胆"的,传统手段在解决这类问题时面临着相应的技术瓶颈.基于此,探索基于单元测试召回异常问题的方法,实现了一套通用且无人参与的单测生成系 ...

  9. 线上故障之-雪花算法重复、序列化、redis锁失效、double精准计算

    线上故障之-雪花算法重复.序列化.redis锁失效.double精准计算 雪花算法重复 问题发现 定位 影响范围 解决方案 扩展-雪花算法原理分析: 序列化 运营商 POP 裸机搭售自营套餐事故分析 ...

最新文章

  1. Java网络编程笔记2
  2. 用ram实现寄存器堆_Verilog如何实现低功耗设计?
  3. Linux文本处理命令:cut grep awk sed printf
  4. 在腾讯云上安装mysql遇到的问题
  5. discuz 标签详解
  6. LDA︱基于LDA的Topic Model变形+一些NLP开源项目
  7. 用网络访问控制(NAC)解决网络安全问题
  8. SQL*Loader 和 Data Pump
  9. KT:一款可提升Kubernetes开发效率的免费工具
  10. 程序员怎样才能写出一篇好的博客或者技术文章
  11. 鸡腿の游戏_纪中1737
  12. 实现图片在时间轴左右交替放置
  13. python将学号与成绩匹配_python输入学号输出成绩等级_python将百分制成绩转换为等级制输出...
  14. Appium+Python appium启动夜神模拟器定位元素(三)
  15. 北航991——设备管理(重点)
  16. Mysql 脚本创建触发器报错 1064 42000
  17. 【Selenium】切换/窗口切换
  18. Remote 激光微粒计数器参数是什么
  19. 【手写 Vue2.x 源码】第十九篇 - 根据 vnode 创建真实节点
  20. 使用GEOquery包下载原始数据

热门文章

  1. Android之简单背景颜色渐变实现
  2. python闭环最短路径_深度学习经典算法 | 蚁群算法解析
  3. python中sendkeys.sendkeys_python的webbrowser模块和SendKeys模块
  4. 双时隙的工作原理_OFDM调制技术原理是什么 OFDM调制实现原理介绍【图文】
  5. 软件项目组织管理(四)项目集成管理
  6. 小手工纸盒机器人_亲子手工 | DIY弹珠迷宫小黑手自制玩具系列
  7. 一颗钉子能承受多大的重量?
  8. 又砸又烧,还要泼脏水,这谣言到底什么时候才没人信?发生这样的事真没想到.........
  9. 一壶 100℃ 的开水从多高倒进嘴里不会觉得烫?
  10. 对于“知识”,我们存在哪些误解?