1. 日常巡检发现新扩容的一台web转发服务器负载异常。比原来的稍高仍然在正常范围内,but作为一个SRE是不能放过任何异常。

  1. 安排好其他日常工作开始排查。

    • 新增服务器系统版本跟原来不一致。(原来为centos6.x,异常服务器为centos7.x) ,异常服务器从lvs下线重装,保证系统版本都为6.x依然没有恢复。(论:保持环境统一重要性。)为什么要重新装centos6.x呢?当时怀疑线上nginx是在centos6.x环境下编译的,运行在centos7.x下面,可能会是这个原因。

    • 仔细对比下环境,确认系统版本nginx版本nginx配置完全一样。

  1. 通过火焰图分析大部分cpu占用为https握手阶段函数(bn_sqr8x_interna,mul4x_internall),查看log发现问题服务器及正常服务器https及http请求数量相同。(此路不通。)

  1. 既然软件环境一样来看硬件及驱动。通过监控确定新增一批服务负载都比原来的稍高,新增服务器及原来服务器从cpu,内存硬盘配置一样。确定新增服务器没有节能没开,cpu内存频率正常硬盘读写正常,找系统同事查看未见硬件故障。部分驱动版本信息不同,进行了替换验证,整个过程是痛苦的,感谢系统及dell同学。(大家一个team一起背锅)

  1. 通过找不同没有解决问题了。但是我们还是要继续,现在我们很好奇很想知道答案。继续分析我们发现了问题服务器cpu很不均衡。为什么不均衡了,strace一下发现大量的(Resourcetemporarilyunavailable)cpu在空转。

    来看下nginx对请求分配的模型。master进程监听端口号(例如80),所有的nginx worker进程开始用epoll_wait来处理新事件(linux下),如果不加任何保护,一个新连接来临时,会有多个worker进程在epoll_wait后被唤醒然后只有一个线程处理这个请求其他的则会失败。cpu空转负载升高。这就是所谓epoll_wait惊群效应。当然nginx会有办法处理这个问题:加锁。

  1. 剩下的就简单了。对问题服务器手动配置上锁(accept_mutex),然后负载正常了(每把锁都是双刃剑,加不加要具体问题具体分析)。但是,你可能会有疑问版本是一样的啊,正常的服务器也没手动加锁啊。伟大福尔摩斯说过:When you have eliminated the impossibles,whatever remains,however improbable,must be the truth真相就是线上nginx根本不是一个版本(一脸懵逼)。手动查看下线上运行的nginx文件被删除了,线上运行了一个不存在的版本,存在的版本是更新了的。原来正常的而服务器上线是reload新版nginx不会生效,新增的服务器是start运行的是新版nginx。

  1. 下面的问题就是tengine2.1跟tengine2.2accept_mutex参数由默认的on改为了off为什么要改呢。与时俱进。当初这个参数是为了避免在epoll_wait所出现惊群效应。可以参考(https://www.jianshu.com/p/21c3e5b99f4a)新版内核已经有了处理这个方法不再需要nginx单独配置。

总结:反思并完善整个运维流程,以避免相关问题再次发生,对SRE来说永远是最重要的。

一些启示:

  • 线上环境尽量完全一致(容器化可以很好的解决这一点);

  • 每次变更都要谨慎及测试。

一个小米SRE的日常问题排查记录相关推荐

  1. mysql查询死锁的次数_一次神奇的MySQL死锁排查记录

    一次神奇的MySQL死锁排查记录 发布时间:2020-08-29 00:50:26 来源:脚本之家 阅读:135 作者:咖啡拿铁 背景 说起Mysql死锁,之前写过一次有关Mysql加锁的基本介绍,对 ...

  2. 转:一个小公司老板的日常管理

    一个小公司老板的日常管理,希望能让创业的朋友学到东西 1. 小公司如何留住骨干: 2.关于授权 3.有的钱不能省 5.关于招聘 6.老板尽量唱红脸 7.公司里的亲戚 8.当老板和开车 9.按时发工资 ...

  3. 一个算法工程师的日常是怎样的?

    点击上方"3D视觉工坊",选择"星标" 干货第一时间送达 来自 | 知乎 链接 | https://www.zhihu.com/question/2969281 ...

  4. 【转】一个小公司老板的日常管理,希望能让创业的朋友学到东西

    [转]一个小公司老板的日常管理,希望能让创业的朋友学到东西 1. 小公司如何留住骨干: 2.关于授权 3.有的钱不能省 5.关于招聘 6.老板尽量唱红脸 7.公司里的亲戚 8.当老板和开车 9.按时发 ...

  5. 一个程序员的日常软件清单

    一个程序员的日常软件清单 前言 年纪大了就容易忘东忘西.作为一个老程序员,我也来给大家带带货哈哈.国内搜索引擎做的实在是垃圾.如果你想通过搜索引擎搜索你想要下载的软件,你会很容易下载到一些附带流氓插件 ...

  6. 一个小公司老板的日常管理[朋友发来的,给大家分享一下]

    一个小公司老板的日常管理 这是一篇讨论现实商业经验的文章,一方面,可以给创业的朋友提供一些参考意见,另一方面,作者的经验中包含了许多经济学的道理.有兴趣的读者可以结合经济学知识和自己的感受做进一步的思 ...

  7. 日常Bug排查-系统失去响应-Redis使用不当

    日常Bug排查-系统失去响应-Redis使用不当 前言 日常Bug排查系列都是一些简单Bug排查,笔者将在这里介绍一些排查Bug的简单技巧,同时顺便积累素材^_^. Bug现场 开发反应线上系统出现失 ...

  8. 一次服务器宕机的排查记录

    服务器宕机的排查记录 生产环境凌晨突然宕机,日志报错数据库链接超时 cpu.内存 磁盘 飙升 系统采用了springcloud 架构,通过阿里云的监控对比,发现仅仅一台服务器的宕机 分析日志发现,宕机 ...

  9. 程序猿 Windows 10 日常使用软件记录

    文章目录 程序猿 Windows 10 日常使用软件记录 1.浏览器 2.日常笔记 3.代码阅读 4.编程工具 5.下载工具 6.SSH工具 7.照片视频 8.画图工具 9..安全防卫 10.软件管理 ...

最新文章

  1. SpringSecurity入门01(含源码)
  2. IEC104协议规约解析
  3. Semaphore同步
  4. db2主键自增和oracle,oracle_浅析常用数据库的自增字段创建方法汇总,DB2复制代码 代码如下:CREATEnbsp - phpStudy...
  5. Android菜鸟的成长笔记(13)——异步任务(Async Task)
  6. 预测2019那些可能改变我们生活的技术
  7. 自定义评分器Similarity,提高搜索体验(转)
  8. 计算机里的音乐怎么设置,声音和音频设备在电脑上如何设置 电脑无声的情况如何解决【详解】...
  9. linux用户权限不够解析及解决方案
  10. 苹果保修期查询_保修期还有6个月的IPhone X 换个“新”主板变“过保”了 维修点这样回应...
  11. Epicor ERP
  12. 用Python手把手教你做一只口红色号识别器,秒变李佳琦
  13. group by 如何自定义规则分组,合并分组
  14. C语言-大端存储和小端存储
  15. 2022 C语言数据结构总结浅浅入门(4)双向链表以及堆栈
  16. [转载] 机器学习数据集统计系列(二)
  17. 跟你聊聊员工的离职成本,细算下来超级恐怖!
  18. 解决论文查重时参考文献被标红的方法
  19. 企业对产能进行规划的具体步骤有哪些?
  20. java 鱼刺图_软件测试技术(三)——使用因果图法进行的UI测试

热门文章

  1. ALI的Tensorflow炼成与GAN科普
  2. List, Set, Map是否继承自Collection接口?
  3. 分布式缓存memcached
  4. View结合组策略进行应用程序下发
  5. svn Error:Wrong committed revision number: -1。
  6. Windows2008+sqlserver2008集群安装(图文并貌)
  7. 计量经济学计算机答案第三章,计量经济学第三章习题及答案
  8. android sdio 时钟 ios-clock,iOS 炫酷时钟
  9. Redis快照(Snapshot)特点
  10. MySQL高级 - 日志 - 查询日志