一个小米SRE的日常问题排查记录
- 日常巡检发现新扩容的一台web转发服务器负载异常。比原来的稍高仍然在正常范围内,but作为一个SRE是不能放过任何异常。
安排好其他日常工作开始排查。
新增服务器系统版本跟原来不一致。(原来为centos6.x,异常服务器为centos7.x) ,异常服务器从lvs下线重装,保证系统版本都为6.x依然没有恢复。(论:保持环境统一重要性。)为什么要重新装centos6.x呢?当时怀疑线上nginx是在centos6.x环境下编译的,运行在centos7.x下面,可能会是这个原因。
仔细对比下环境,确认系统版本nginx版本nginx配置完全一样。
- 通过火焰图分析大部分cpu占用为https握手阶段函数(bn_sqr8x_interna,mul4x_internall),查看log发现问题服务器及正常服务器https及http请求数量相同。(此路不通。)
- 既然软件环境一样来看硬件及驱动。通过监控确定新增一批服务负载都比原来的稍高,新增服务器及原来服务器从cpu,内存硬盘配置一样。确定新增服务器没有节能没开,cpu内存频率正常硬盘读写正常,找系统同事查看未见硬件故障。部分驱动版本信息不同,进行了替换验证,整个过程是痛苦的,感谢系统及dell同学。(大家一个team一起背锅)
通过找不同没有解决问题了。但是我们还是要继续,现在我们很好奇很想知道答案。继续分析我们发现了问题服务器cpu很不均衡。为什么不均衡了,strace一下发现大量的(Resourcetemporarilyunavailable)cpu在空转。
来看下nginx对请求分配的模型。master进程监听端口号(例如80),所有的nginx worker进程开始用epoll_wait来处理新事件(linux下),如果不加任何保护,一个新连接来临时,会有多个worker进程在epoll_wait后被唤醒然后只有一个线程处理这个请求其他的则会失败。cpu空转负载升高。这就是所谓epoll_wait惊群效应。当然nginx会有办法处理这个问题:加锁。
- 剩下的就简单了。对问题服务器手动配置上锁(accept_mutex),然后负载正常了(每把锁都是双刃剑,加不加要具体问题具体分析)。但是,你可能会有疑问版本是一样的啊,正常的服务器也没手动加锁啊。伟大福尔摩斯说过:When you have eliminated the impossibles,whatever remains,however improbable,must be the truth真相就是线上nginx根本不是一个版本(一脸懵逼)。手动查看下线上运行的nginx文件被删除了,线上运行了一个不存在的版本,存在的版本是更新了的。原来正常的而服务器上线是reload新版nginx不会生效,新增的服务器是start运行的是新版nginx。
- 下面的问题就是tengine2.1跟tengine2.2accept_mutex参数由默认的on改为了off为什么要改呢。与时俱进。当初这个参数是为了避免在epoll_wait所出现惊群效应。可以参考(https://www.jianshu.com/p/21c3e5b99f4a)新版内核已经有了处理这个方法不再需要nginx单独配置。
总结:反思并完善整个运维流程,以避免相关问题再次发生,对SRE来说永远是最重要的。
一些启示:
线上环境尽量完全一致(容器化可以很好的解决这一点);
每次变更都要谨慎及测试。
一个小米SRE的日常问题排查记录相关推荐
- mysql查询死锁的次数_一次神奇的MySQL死锁排查记录
一次神奇的MySQL死锁排查记录 发布时间:2020-08-29 00:50:26 来源:脚本之家 阅读:135 作者:咖啡拿铁 背景 说起Mysql死锁,之前写过一次有关Mysql加锁的基本介绍,对 ...
- 转:一个小公司老板的日常管理
一个小公司老板的日常管理,希望能让创业的朋友学到东西 1. 小公司如何留住骨干: 2.关于授权 3.有的钱不能省 5.关于招聘 6.老板尽量唱红脸 7.公司里的亲戚 8.当老板和开车 9.按时发工资 ...
- 一个算法工程师的日常是怎样的?
点击上方"3D视觉工坊",选择"星标" 干货第一时间送达 来自 | 知乎 链接 | https://www.zhihu.com/question/2969281 ...
- 【转】一个小公司老板的日常管理,希望能让创业的朋友学到东西
[转]一个小公司老板的日常管理,希望能让创业的朋友学到东西 1. 小公司如何留住骨干: 2.关于授权 3.有的钱不能省 5.关于招聘 6.老板尽量唱红脸 7.公司里的亲戚 8.当老板和开车 9.按时发 ...
- 一个程序员的日常软件清单
一个程序员的日常软件清单 前言 年纪大了就容易忘东忘西.作为一个老程序员,我也来给大家带带货哈哈.国内搜索引擎做的实在是垃圾.如果你想通过搜索引擎搜索你想要下载的软件,你会很容易下载到一些附带流氓插件 ...
- 一个小公司老板的日常管理[朋友发来的,给大家分享一下]
一个小公司老板的日常管理 这是一篇讨论现实商业经验的文章,一方面,可以给创业的朋友提供一些参考意见,另一方面,作者的经验中包含了许多经济学的道理.有兴趣的读者可以结合经济学知识和自己的感受做进一步的思 ...
- 日常Bug排查-系统失去响应-Redis使用不当
日常Bug排查-系统失去响应-Redis使用不当 前言 日常Bug排查系列都是一些简单Bug排查,笔者将在这里介绍一些排查Bug的简单技巧,同时顺便积累素材^_^. Bug现场 开发反应线上系统出现失 ...
- 一次服务器宕机的排查记录
服务器宕机的排查记录 生产环境凌晨突然宕机,日志报错数据库链接超时 cpu.内存 磁盘 飙升 系统采用了springcloud 架构,通过阿里云的监控对比,发现仅仅一台服务器的宕机 分析日志发现,宕机 ...
- 程序猿 Windows 10 日常使用软件记录
文章目录 程序猿 Windows 10 日常使用软件记录 1.浏览器 2.日常笔记 3.代码阅读 4.编程工具 5.下载工具 6.SSH工具 7.照片视频 8.画图工具 9..安全防卫 10.软件管理 ...
最新文章
- SpringSecurity入门01(含源码)
- IEC104协议规约解析
- Semaphore同步
- db2主键自增和oracle,oracle_浅析常用数据库的自增字段创建方法汇总,DB2复制代码 代码如下:CREATEnbsp - phpStudy...
- Android菜鸟的成长笔记(13)——异步任务(Async Task)
- 预测2019那些可能改变我们生活的技术
- 自定义评分器Similarity,提高搜索体验(转)
- 计算机里的音乐怎么设置,声音和音频设备在电脑上如何设置 电脑无声的情况如何解决【详解】...
- linux用户权限不够解析及解决方案
- 苹果保修期查询_保修期还有6个月的IPhone X 换个“新”主板变“过保”了 维修点这样回应...
- Epicor ERP
- 用Python手把手教你做一只口红色号识别器,秒变李佳琦
- group by 如何自定义规则分组,合并分组
- C语言-大端存储和小端存储
- 2022 C语言数据结构总结浅浅入门(4)双向链表以及堆栈
- [转载] 机器学习数据集统计系列(二)
- 跟你聊聊员工的离职成本,细算下来超级恐怖!
- 解决论文查重时参考文献被标红的方法
- 企业对产能进行规划的具体步骤有哪些?
- java 鱼刺图_软件测试技术(三)——使用因果图法进行的UI测试
热门文章
- ALI的Tensorflow炼成与GAN科普
- List, Set, Map是否继承自Collection接口?
- 分布式缓存memcached
- View结合组策略进行应用程序下发
- svn Error:Wrong committed revision number: -1。
- Windows2008+sqlserver2008集群安装(图文并貌)
- 计量经济学计算机答案第三章,计量经济学第三章习题及答案
- android sdio 时钟 ios-clock,iOS 炫酷时钟
- Redis快照(Snapshot)特点
- MySQL高级 - 日志 - 查询日志