在很多公司中,IT、数据中心、业务系统一出故障,会有很多人被叫到作战室(就是一个为了解决该问题,而把所有相关人员集中在一起的一个会议室), 但是对于这个问题他们是否可以修复, 是否他们应该负有责任, 经常没有线索.

「证据」(基础架构监控数据, 日志文件, 用户投诉等等) 表明了症状, 但是与 root cause 无关. 只有很多的日志信息和高级别的告警并不会给你与这个问题根因真正相关的答案.

为了远离这种场景, 真正的「证据」应该是什么? 你应该问什么问题?

是一个用户抱怨还是所有用户都受影响?

「只是」CEO 抱怨一个问题, 因为一份 BI 报告在他的老 IE7 上无法工作? 或者「只是」使用联通上网的终端用户? 了解一个问题发生在非常小的用户群, 还是说全中国的用户都受到影响, 是重中之重.

交付链(如: CDN, 第三方, ISP, 云供应商, 托管服务, 手机网络)有问题么?

当代 web 应用、移动服务、互联网服务、O2O业务等依赖一长串交付链的服务. 知道每个的影响会告诉你是否应该检查自己的数据中心, 还是说应该打电话给服务商.

关键事务是否受影响?

是否关键业务比如保险投保受到影响? 还是说报错的页面早已经不用了? 你需要监控最关键的业务性能.

是这个应用的问题么?

应用很复杂. 如果你知道问题是发生在这个应用里, 你然后需要进行故障隔离, 然后让对应的开发和架构师定位问题效率更高.

这个问题与糟糕的代码有关么?

如果客户使用加载缓慢、体验很差,应用响应时间很慢, 第一个问题应该是是否与糟糕的代码有关. 你需要分析代码级别的性能热点来找到是否原因是低效的算法还是缺乏代码和架构的最佳实践.

这个问题在虚拟机、容器、中间件...里么?

如果虚拟机(如:VMware, EC2...)或你的容器(Docker)或你的中间件或你的应用运行时(如:tomcat)没有正确的 size, 或者和其他虚拟机及容器存在资源争用也可能引起性能问题. 如果你知道虚拟机的性能影响到了应用, 你会知道引入 VM 专家, 而不是应用开发, 来解决这个问题.

容器、中间件、应用运行时同理。

是基础架构导致的问题么?

如果不是应用自身问题, 而是因为 app 运行在资源不足的基础架构上会怎样? 如果需要运行垃圾回收的 CPU 因为超用导致不可用会怎样? 那么是时候考虑拆分应用或扩展基础架构了.

是应用服务器的问题么?

因为不正确的配置或错误的部署, 应用服务器也可能是性能问题的原因. 正确的资源池(线程, 数据源等)大小, 安全配置或日志参数都会影响性能. 如果发现是应用服务器的问题, 如果是商业应用服务器,你需要联系 IBM, Oracle, 微软专家;如果是开源应用服务器,你需要联系贵司的相关中间件专家.

总结

有了这些问题的答案, 你可以消除作战室, 迅速定位问题根源, 优化并找到解决方案. 所以不需要 20 人的作战室, 你只需要3个人 - 一个开发, 一个测试, 一个运维 - 评估详细的性能 insight, 并引入需要的专家. 完美!

三人行, 必有我师; 知识共享, 天下为公. 本文由东风微鸣技术博客 EWhisper.cn 编写.

Troubleshooting 专题 - 问正确的问题 得到正确的答案的更多相关文章

  1. modelsim仿真正确FPGA运行不正确的可能原因 - cm4写寄存器错

    困住整整一周了,工作进行不下去,中午偶遇导师,指导意见是有两种可能: 1.  FPGA编译器优化代码,可以考虑把综合过程中所有的warning排查一下 2.  verilog里有不可综合的语句. 又及 ...

  2. 【笔记】关于jq $.ajax 函数 success回调函数不能赋正确值或返回正确值的问题

    最近在一个项目里面打算实现如下功能: 当我注册账号的时候当输入账号完毕后输入框失焦时执行一个 ajax 请求,验证账号是否被注册,并未这个输入框的 isCorrect属性赋值,如果没有被注册 isCo ...

  3. STM32F429时钟不正确导致串口无法正确收发

    老早之前自己做了块F4的板子,设计原理图时没有去找官方参考,看了手册后就开工了,做完板子回来测试串口发现PC端接收到的都是乱码,尝试了几种波特率也没能正确接收,串口的代码是官方参考例程的,不应该有问题 ...

  4. 正确分析结构使用正确的HTML标签。CSS样式写一起。

    在内容中 一行内容包括三张图片,每张图片下面有标题和具体介绍,那么可以使用: 分析和解决如下步骤: 1,一行三块,先向左浮动成为一行float:left. 2,把他们的宽度平分三份,33.3%.三份都 ...

  5. 大小厂必问Java后端面试题(含答案)

    你好,我是yes. 这个系列的文章不会是背诵版,不是那种贴上标准答案,到时候照着答就行的面试题汇总. 我会用大白话尽量用解释性.理解性的语言来回答,但是肯定没有比平时通过一篇文章来讲解清晰,不过我尽量 ...

  6. 需要正确安装 Microsoft.Windows.ShellExperienceHost 和 "Microsoft.Windows.Cortana" 应用程序。

    windows 10 开始菜单修复工具 Win10开始菜单修复工具出现的原因,自从升级到Windows  10,一直BUG不断,而其中有一个BUG非常的让你印象深刻,就是开始菜单无响应,你用着用着电脑 ...

  7. 如何正确使用Cocoapods

    ➠更多技术干货请戳:听云博客 一.介绍Cocoapods Cocoapods是引入为项目引入新血液的接口,只有引入了新血液,功能才可以多样化,进而满足不同的消费群体.使用Cocoapods可以方便日后 ...

  8. 第一个python程序-判断登陆用户名和密码是否正确

    #setencoding=utf-8 #用户名和密码输入正确,则登陆成功 #用户名正确密码错误,只再输入密码,有3次机会 #错误3次,则把用户名放入lock中 import os,sys #存放用户名 ...

  9. 脚本重定向输出【错误、正确】——分析service脚本中用到的语法

    <1> >&2 即 1>&2 也就是把结果输出到和标准错误一样:之前如果有定义标准错误重定向到某log文件,那么标准输出也重定向到这个log文件如:ls 2&g ...

  10. js&jquery验证邮箱和手机号是否正确范例

    实现源码: <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> ...

随机推荐

  1. Vue获取DOM的几种方法

    虽然Vue实现了MVVM模型,将数据和表现进行了分离,我们只需要更新数据就能使DOM同步更新,但是某些情况下,还是需要获取DOM元素进行操作(比如引入的某个库要求传入一个根dom元素作为根节点,或者写 ...

  2. anaconda的环境变量

    参考: (40条消息) Anaconda 环境变量手动设置(详细)_一夜星尘的博客-CSDN博客_anaconda环境变量手动设置

  3. FCC 高级算法题 验证电话号码

    Validate US Telephone Numbers 如果传入字符串是一个有效的美国电话号码,则返回 true. 用户可以在表单中填入一个任意有效美国电话号码. 下面是一些有效号码的例子(还有下 ...

  4. PriorityQueue&&Function overload

    用 STL 里面堆算法实现的与真正的STL里面的 priority_queue用法相似的priority_queue    #include <iostream>    #include ...

  5. 第五章 散列表(哈希表)(hash表)

    散列表 特点 键和值一一对应 可以快速找到对应值,不需要进行查找 运用场景 模拟映射关系 防止重复 缓存记住数据,以免服务器再通过处理来生成它们 例如: 电话簿 用缓存记录url和对应的静态页面,存在 ...

  6. C++ || 用类 写交换函数 ||函数指针传递

    点击查看代码 #include <iostream> using namespace std; void swap(int* a,int* b) //函数参数为指针形式 { int p = ...

  7. cesium 3d tileset 问题总结

    Cesium 3d Tileset 中 i3dm 中存储的模型坐标为笛卡尔坐标,占四个字节,因为地球半径比较大,所以只有整数位和小数点后1位有效,因此会损失精度.对于要求精度比较高的模型,会发现位置偏 ...

  8. 查看shell 用户连接数

    w | grep pts |wc -l

  9. weblogic11g打补丁,应用出现乱码

    解决办法: 1.找到域下的这个路径:autodeploy\manager\WEB-INF里的web.xml文件,先备份好,再添加以下语句: <context-param> <para ...

  10. 子接口vlan终结

    问题: 在华为的NE40E设备上,配置三层字接口的ip后,接口的physical状态为up, protocol为down,接口还是不可用. 解决方案: 需要在子接口上配置vlan终结,配置如下: 为什 ...