用那些方法可以对网络根源如何对设备故障进行快速有效诊断分析

今天准备谈下对于IT人员面对技术類问题分析和解决的一些思路和实践总结在很早以前我就谈到过,对于开发人员在后期需要的不是简单的新业务功能的设计和开发能力而是问题分析和解决能力。这类问题分析和解决本身又包括了两个方面内容:

  •  其一是IT系统运行类问题和故障的分析和解决;
  •  其二是面对複杂业务问题时候将其转化为技术解决方案能力

在前面我讲思维类文章的时候就专门谈到IT人员应该关注自己思维能力的提升,这个思维能力实际上包括了分析和认知事物独立的问题分析和解决两个层面的内容。

  •  对于第一个层面在IT领域更多的就是架构设计的能力将现实嘚业务需求和场景转化为抽象的架构设计语言和架构模型的能力;
  •  而第二个层面在IT领域里面即是面对问题或故障的时候进行问题分析诊断,假设和验证快速解决的能力。

而对我们当前很多IT人员来说实际上两个方面的能力都欠缺,既不能独立的进行整体架构设计对负责嘚业务进行自顶向下,分而治之的建模和设计也不能在面对生产环境关键故障或问题的时候快速定位,并找到根源快速解决而是将自巳大量的时间花费在重复的事务性工作上,花费在对各类新技术的狂热追求上

实际上自己也从不反对保持对新技术的学习兴趣。但是任哬新技术如果你实际的工作环境没有实践的机会,那么大量新技术下应该出现的类似性能安全,可靠性等问题你都无法真正得到实践驗证和解决

在这种情况下对新技术也只能够停留在理论阶段而无太大意义。

对于问题分析和解决的核心逻辑可以先参考我前面发布的攵章:《问题分析和解决逻辑-麦肯锡七步成诗仅是开始》() 在前面这篇文章里面,结合麦肯锡问题分析七步法对问题分析核心逻辑进行了詳细的描述。

一、技术问题解决的关键点

我写过不少的关于技术问题分析和诊断的文章这些问题基本也是来源于真实的项目实践。

即使箌现在有些问题也没有完全得到定位和最终解决包括我们找了Oracle专家和顾问,也不是说马上就能够满足我们解决掉该技术问题

简单来说,如果一个技术问题你能够直接快速的根据异常或问题关键字在网上搜索到相关的答案,这种问题都谈不上真正有挑战的技术问题

对於技术问题的解决,基于前面实践的问题定位、分析和解决的思路我还是想谈下在解决技术问题中的一些关键点和思考逻辑方面的内容。

1、个人前期大量实践经验的积累

这点相当重要任何知识库,搜索都代替不了个人已有的知识经验积累

为什么说工作经验很值钱?

往往就是因为你在一个专业领域有大量实践积累大量问题分析解决经验积累。这些经验可以帮助你在遇到问题的时候快速地对问题进行预判和定位包括提出最可能的假设路径。

当前解决问题很多都是非结构化解决问题方法,即是优先提出最可能的假设然后再去验证假設是否能够真正解决问题。

那么有经验的人往往就最容易提出最可能的假设路径而减少对各种不可能弯路的尝试。一个问题本身有A到E五個独立假设路径而最可能路径是A,你解决问题速度慢的原因往往就是你最后才假设和尝试到A路径并解决问题而有经验的人往往一开始僦选择了假设A进行验证。

要积累这种经验必须在问题解决后及时复盘,将其抽象为经验和方法论

问题定位的重点就是缩小范围和确定邊界。一个问题出现之后最重要的就是快速的定位

比如一个业务系统查询故障,要快速的定位是基础设施资源的问题还是数据库和中間件的问题,还是说程序的问题

如果是程序的问题,又需要马上定位到究竟是前端的问题还是逻辑层的问题或数据库的问题。

只有快速的确定边界和定位问题才能够有针对性的去解决问题。任何问题的定位都是追溯到引发问题的根源而不是解决问题的表象,类似头痛医头脚痛医脚

那么如何缩小范围和快速的确定边界?

比如我们假设一个最简单的场景:问题的产生经历了A-》B的两个过程那么如何快速的确定问题是在A阶段产生的还是在B阶段产生的呢?

对于这个问题我们有如下的问题定位方法和思路可以参考和借鉴:

  •  替换法:比如将A替换为A1,如果问题消失那么说明问题出在A阶段;
  •  断点法:在A和B之间设置断点监控输出,判断A输出是否正常;
  •  假设法:假设A阶段有问题對A阶段的参数进行调整,观察问题是否解决

当然还有其他很多的问题定位方法,但是对于所有问题定位和确定边界的方法中最有效的仍然是类似于快速查找中的二分法,通过二分法可以快速的帮助我们缩小范围和定位问题

我们进一步对上面逻辑举例说明,比如一个软件应用出现Bug的场景如下图:

可以看到看到要分析和定位Bug为何困难?

引入问题既可能是我们的输入出现错误我们面对的软硬件环境运行狀态有问题,也可能是我们实际程序处理构成出现问题

即使你定位到程序处理问题,那么还可能是逻辑层数据访问层或数据库多个点導致的问题。

要明白任何你遇到过的技术问题,往往都有前人遇到过踩过坑,并总结和分享到互联网上面因此善用互联网和搜索引擎,进行基于问题关键字的技术检索仍然是解决技术问题的关键途径

即使搜索引擎没有帮助我们解决最终的问题,往往也会帮助我们在搜索的过程中学习与该技术问题相关的很多知识

要搜索,一个重点就是选择搜索的关键字对于关键字的选择没有一次就选择准确的话,自己就要多次尝试和迭代直到能够准确的描述问题为止,同时在搜索的过程中搜索的答案往往也可以帮助你进一步的细化关键字

比洳对于系统运行故障或问题,对于关键字的描述应该包括:

  •  从数据库,中间件和业务系统错误日志中提取关键字信息;
  •  从你产生问题的環境背景,场景中增加缩小检索范围的关键字信息;
  •  从搜索到的网页中挖掘更加有意义的描述类似问题的关键字信息

同时对于搜索而訁,特别是技术问题的搜索有官方知识库的要优先搜索官方的知识库:比如对于Oracle产品相关的技术问题,我们也会先搜索Oracle官方的Support网站同時搜索类似StackOverFlow网站,这些网站往往有更加全部的技术问题解决文章

搜索技术文章,那么国外的技术网站相对来说更加全面而对于百度这塊相对弱,很多国外技术网站内容甚至都搜索不到这时候可以尝试Google或Bing搜索。

3、技术问题解决和复盘

在前期我们实施Oracle SOA项目的时候遇到了將服务封装和注册接入到OSB后,客户端消费和调用服务出现消息报文内容被截断的问题

由于该问题出现概率不高,并且消费端系统本身有偅试机制也暂时不影响到具体的OSB服务运行和使用。虽然到现在为止造成该问题的原因究竟是客户端服务器配置,负载均衡网络,报攵本身OSB套件本身的Bug缺陷等哪方面还没有最终确认,但是整个问题排查和分析过程还是有意义的

在问题排查和分析过程中,对于各类超時时间的含义OSB的一些关键配置,报文解析Http Post报文发送长短连接,Tomcat的一些配置都进行了了解同时通过该问题的分析,也发现了在技术问題分析过程中的一些问题供后面在分析问题中借鉴和参考。

4、确定问题边界始终是最重要的

客户端发送报文到服务器端接收报文当前現象是客户端Log日志报文是完整的,而OSB上Log的日志报文不完整

那么究竟是客户端,服务端还是网络传输过程中出现的问题?这个问题边界嘚确定相当重要

实际上在几天的问题分析和排查中对于问题边界一直没有最终确认,导致问题也一直没有很肯定的得到定位究竟在哪里也导致最终问题没有得到明确的解决和排查。

比如上面说的消息报文不完整这个问题要确定边界实际上常规思路也就两种,

  •  一种就是修改程序代码进行更加详细的日志记录;

比如该问题可以在客户端进行Http或TCP Trace同时在服务器端也进行Http TCP Trace,通过两边的Trace信息才能够最终确定问题嘚边界在哪里

但是在生产环境很难这样去做,

  •  一个是接口服务调用并发量大导致Trace日志的量也巨大而且不止这一个接口服务在调用;
  •  一個是协调的需要配合的资源也太多,很难去联合排查和跟踪

故障的复现是我们分析和定位问题的一个基础,问题如果随机偶然发生往往昰最难解决的当你面对问题的时候,你需要定位那就需要问题能够复现才方便不断地去Debug或Trace。

在该问题的解决过程中由于该异常是偶嘫出现,不定时而且是没有规律出现所以也给我们排查问题造成了很大的麻烦。

虽然在问题排查过程中我将出现问题的异常日志,和湔后正常的实例都进行了导出分析对出现问题的服务器Server节点、调用方、调用时间段都进行了分析,但是没有明显的发现出现问题的规律究竟在哪里

同时该问题具有很高的随机性,往往是第一次调用不成功但是同样的报文在第二次或第三次就调用成功,同时每次对于报攵的截断长度都不相同这导致很难分析具体什么场景下调用不成功。

即由于问题不能在特定的输入条件下重现导致我们很难对问题进荇进一步的分析和定位,也导致我们很难去进行特定的跟踪和边界确定同时也很难在测试环境对该问题进行进一步的分析,和各种参数條件修改后的测试和验证

即由于问题不能在特定的输入条件下重现,导致我们很难对问题进行进一步的分析和定位也导致我们很难去進行特定的跟踪和边界确定。同时也很难在测试环境对该问题进行进一步的分析和各种参数条件修改后的测试和验证。

以上都导致问题佷难快速定位和分析只能够大范围的场景+异常的关键字搜索,然后搜索到相关的可能解决方案后一个个的去尝试看是否能够解决。

但昰这种方式带来巨大的问题,即:

由于测试环境问题不复现我们无法在测试环境做这个事情。那么搜索到的解决方案验证只能够在生產环境做但是生产环境根据规定是绝对不允许随意去修改配置和调整参数的。

这也正是我们看到很多大型IT项目上线往往会预留3个月左祐的试运行期间的原因,在试运行期间生产环境的日常运维和配置修改不会严格受控管理也方便及时分析和解决问题。

6、网上搜索很难搜索到完全一致的异常场景

由于项目采用的Oracle SOA Suite 12c套件产品当前在国内并没有大范围的应用,所以如果用百度搜索基本搜索不到有用信息改鼡Google或Bing很多信息也无法搜索到。

因此在该问题的排查过程中我们基本都在Oracle Support网站进行了所有相关知识点的排查,同时选择各类关键字进行搜索引擎的搜索其中包括了:

但是并没有搜索到完全一致的场景。

对于一个最相似的关于Failed to parse XML document的场景我们进行了相关的调整,即将KeepAlive设置为False同時对Post Timeout设置为120秒,但是仍然出现在120秒超时时间到达后任何没有Post到完整的请求而导致超时的问题

由于无法搜索到完全类似的场景,也导致我們很难根据网上给出的方法进行进一步测试和验证并且Oracle顾问对于该问题也只能给出进行Tcp Trace的无用建议。

7、关键基础技术知识缺乏导致问題分析和提出假设不合理

在原来问题的分析和解决中,由于搜索引擎往往会给出完全类似的场景我们只需要根据搜索引擎给出的排查思蕗对问题进行排查即可。

因此解决起来效率很高对于具体底层原理性的内容我们并不需要掌握和了解,只需要能够选择合适的关键字通过搜索引擎搜索到最合适的内容然后进行排查即可。

但是这次问题特殊点就在于搜索引擎根本无法给出完全类似的文章。这就导致需偠基于问题提出各种合理的假设并对假设进行逐一验证。

那么如何提出合理的假设

这里就涉及到对于TCP底层协议,各个超时值的含义和原理Tomcat Server的参数配置,OSB代理服务的解析过程Weblogic的关键参数配置和含义,负载均衡策略乃至Docker容器和IP映射等很多内容都有技术积累才可能提出朂合理的思路。

Size才会有影响这个假设本身就不合理。而要快速的判断这些假设不合理你就必须提前有这些关键的基础技术知识和背景積累。

包括对于Keep Alive长连接Keep Alive的Time out超时时间设置是否会对该服务异常调用操作影响,实际上由于对Keep Alive长连接和各类Timeout的具体含义理解的并不深入也使得很难判定究竟是否有影响,也只能是注意尝试去排除可能性这些也都导致了很难快速的定位出问题根源究竟在哪里。

8、涉及到外围幹系人协同时问题解决困难

这个也是解决服务接口问题的一个关键影响对于接口服务运行问题,往往涉及到业务系统消费方业务系统提供方,OSB服务总线网络,负载均衡设备等多个相关因素和厂商

对于一个问题的排查往往需要协调多方的资源在约定的时间相互配合才能够完成,这些都直接导致排查难度很大很难依靠个人一方力量就完成。

在原来类似大项目实施过程中也经常会遇到这些接口问题的汾析和排查,往往也都是问题造成严重影响后各方才会真正重视该问题,并各自协调资源形成联合的问题排查团队进行问题分析和排查最终才能够解决问题。

虽然截止现在问题没有得到最终解决但是整个分析过程仍然有意义,特进行本文总结

二、问题复盘-文件句柄咑开过多

在前面已经谈到,问题分析解决后需要及时复盘对于问题复盘不是简单的问题解决总结,而是对整个问题分析思考过程进行梳悝包括在问题解决中究竟踩了哪些坑,走了哪些弯路这些经验教训对后续问题的解决有哪些参考意义等。

问题描述:服务器响应很慢服务调用出现超时,接着查询相关的错误日志信息在错误日志信息里面包括了IO Exception的too many open files信息,也包括了socket receive time out的socket连接超时的信息

1、应用服务器监控情况检查

在拿到这个问题后,由于原来也出现过服务响应慢和调用超时的问题所以首先排查的是应用服务器本身的健康状况,因此开始用jstat检查服务器本身的cpu和内存的使用情况经过检查服务器本身完全正常。

2、数据库连接池和线程池检查

在检查这个后接着检查数据库连接池和线程池的情况经过检查虽然有排队情况,但是连接池本身都还有大量剩余也不存在连接池超了的情况。

在这个检查完后回到问題错误日志由于当前有两个错误,即:

  •  问题A文件打开过多问题B服务连接超时,那现在有一个关键问题就是究竟是A问题导致了问题B还昰B问题导致了问题A,还是A和B本身就是在同一时间导致的两个本身不相关的问题在这个时候其实并没有完全肯定的结论。

这就导致我们需偠从两条问题路径去查找问题的根源然后再进行总结和收敛。

要知道对于问题B连接超时Oracle官方的Support网站知识库包括问题解决的6到7个场景的排查,整个排除起来是相当困难的

而且该问题是老服务器出现的新问题,而不是完全新增加服务器出现的问题那必须就要考虑是否和噺部署和上线的服务和应用有关系。

4、回溯近期所做的代码变更

现在回到文件打开数过多的问题经过基本问题查看,发现的就是文件句柄打开太多那么我们要做的就是对新增加的修改和变更进行查看,还是否存在文件句柄没有关闭的情况

5、异常-》文件打开太多-》进一步定位是哪些文件

经过代码的Review我们没有发现这种情况。那接着很自然就是要进一步去定位和分析究竟哪些文件句柄打开没有关闭

而查这個问题的方法是lsof进行log数据,有发现我们的hpunix小型机居然这个命令无法使用没有办法我们先单纯的调高的最大文件打开数现状但是问题依然存在。

注意在这个时候我们停在这里了没有进一步去想如何解决这个问题,而转到去分析服务超时问题

注:当我们在进行问题分析诊斷的时候,选择的没有问题的标准解决路径不要轻易因为阻碍而放弃,你会发现最终你又会回到这个关键路径上

在面对服务超时的问題的时候,我们又走了弯路即直接根据metalink排查方式对各个问题场景进行分析和排除,对中间件的参数和设置进行了大量的修改但是最终該问题还是没有解决。

之所以说走了弯路的原因主要在于没有很好地去分析当前服务器出现服务超时的具体原因对应当前场景没有做具體的分析。

6、进一步分析问题产生的场景和边界

所以后续还是回到当前场景的分析在当前服务器我们新增加部署了哪些服务,这些服务昰否需要逐个进行排除我们实际的服务运行是都超时,还是个别服务超时这个服务超时究竟是发生在哪边?具体的边界在哪里这些问題都需要进一步搞清楚才能有后续行动

1)边界确认:不是所有服务调用都超时

第一个情况就是不是所有的服务都出现超时的问题,主要絀现超时的服务都是某种类型的服务然后我们对超时的服务和服务超时日志进行排除,包括具体的防火墙设置长事务运行的服务本身等。

2)边界确认:不止是新增加的服务超时老服务也超时

现超时的服务并不是都是新增加的服务,也包括了已经有的老的服务运行确實是一个很奇怪的现象。在服务超时设置参数都进行调整后继续观察服务器的健康状况和错误日志记录,发现继续出现too many files open的错误

在这个時候发现还是得回到too many file open这个异常日志上进行进一步的分析原因。

要详细分析必须有详细的log日志以进行定位到这个时候发现还是必须首先得咹装上lsof组件,接着就是查找资料重新在hpunix上安装上lsof组件组件安装后进行详细的lsof日志。

然后每1个小时左右新取一次lsof的数据通过对lsof数据的分析发现确实存在文件句柄不断的增加而无法释放的情况。

到了这一步后出现两个小问题分支:

  •  一个是对lsof数据发现对oracle数据库连接使用的是1524后門端口开始怀疑是这个端口使用有问题,但是后面否定了该假设;
  •  那还是回到文件句柄问题上

那这个问题的关键就是:究竟是哪些文件句柄不算在增加?

后面对lsof日志进行详细分析发现了总是60多个文件句柄不断的在增加和打开,这些文件句柄反复打开多次而且file inode值也是┅样的,到了这个时候关键的想法就是如何通过file inode查找到具体是哪些文件

因为在实际的日志记录中只有文件的路径而没有文件的名称,一時在这个地方停滞

到了这一步,没有办法要做的还是详细的研究lsof日志中的每一个字段的具体含义,找寻如何通过file inode找寻到具体文件的方法

那先想到的就是文件系统中的文件本身是否有inode的说法,后面看到通过ls命令是可以查找到每个文件的文件句柄的那自然我们可以对所囿的文件通过ls查找并导出inode信息,然后和lsof中的文件句柄进行比对找到具体的文件

根据该思路我们到处所有文件属性信息进行比对,最终找箌文件句柄不断打开的文件是哪些

一看到这些文件在不断的打开,问题根源点基本就找到了这些文件都是和我们的底层一个服务组件囿关系的,那么接着看打开这些文件的方法在打开这些文件的使用完成后释放及时进行了资源的释放。

8、源码最终定位-saxReader类文件处理

经过源代码分析发现了具体的问题就是文件不断的打开,但是不是手工对文件句柄进行关闭

但是我们的生产环境为何没有出现通用的问题,这个是和saxReader类处理文件的方法是有关系的saxReader类对文件是会进行关闭,但是具体时间我们并不清楚

那生产环境为何没有出现同样的问题,昰否是在fgc的时候会进行回收这个也只是一个假设,暂时没有做进一步的验证但是至少分析出对于文件的大量持续打开肯定是需要修改嘚。

在对代码进行修改后重新部署部署完成后进行观察,没有再进一步出现过too many files的文件IO异常但是接着还是继续出现一些服务超时异常。

泹是任何服务超时异常都不会再引起too many files打开的异常突然发现刚开始出现的问题A和问题B,实质是反应出了我们当前应用存在两个偏独立的问題虽然两个问题间可能存在相互影响,但是问题本身偏独立都有各自的问题导致根源。

在进一步分析服务超时问题的时候我们对服務调用调用详细日志数据进行分析,发现大多数服务都是正常的而仅仅是个别服务出现了服务调用超时的问题,那么接着还是对单独的個别服务进行原因查找

由于是个别服务的问题,我们完全可以怀疑是服务提供方系统出现了问题那么就需要对服务提供方提供的服务能力进行原因定位和查找,最终找到了一个原因即对方的操作导致了对方数据库出现死锁而服务一直处于等待和锁定状态基于这个假设峩们后续进行了证实确实是该原因。

到这一步基本所有的问题根源点和原因都基本确认清楚通过该次问题定位,分析和解决进一步完善了对应服务应用性能和问题定位的分析和解决方法,从CPU内存再到IO从服务异常日志再到服务详细的调用日志信息,基本形成了一个完整嘚诊断方法

三、问题复盘-服务调用超时

最近跟踪OSB服务运行超时,发现一个很奇怪的现场即在调用业务系统的时候出现1500秒超时返回的情況。而在OSB本身做服务封装设置的时候我们会设置两个时间,如下:

也就是说实际在OSB配置里面并没有出现过1500秒超时的任何配置情况

后面詢问业务系统,得到的答复是业务系统那边有5分钟即300s的超时设置。但是即使如此也应该是返回300s的超时错误,而不是1500s

一开始我们始终茬分析,是否是300s超时重试了5次,导致看到的最终超时设置是1500s因此我们将OSB的所有配置参数又全部检查了一遍,结果没有检查到任何的有5汾钟的超时配置项同时也没有检查到有任何的重试次数是5次的检查项。

在OSB业务服务配置的时候确实可以配置重试,但是我们当前的设置为:

  •  是否支持应用程序重试这个是true。

但是既然最大重试次数为0即使后面的这个checkbox为true,也不应该去进行重试

因为从调用其它的业务系統的接口服务返回情况来看,都没有发生过相应的重试操作同时后续在和业务系统测试的过程中,将该checkbox取消选择同样会发生1500秒的错误,因此暂时确定和该参数关系并不大

后面详细查看日志,会发现整体过程为:

即初步分析很可能的原因是服务调用本身在5分钟在业务系統端超时了但是业务系统端没有对连接进行处理或关闭,导致在OSB侧这个连接被并没有感知到

因此一直等待到600s的时候出现超时,而这个時候超时本身不是检测到业务系统端出现问题的超时或其它原因导致这个thread被stuck,连接被挂起因此又等待了900秒后出现了连接重置。

基于上媔的分析我们进一步查找900s相关的设置在Weblogic的DataSource连接池里面有一个900s收缩频率的设置,该900s的含义为:在收缩为满足需要而增大了的连接池前需等待的秒数如果设置为 0,则将禁用收缩而现在这个值我们设置为900s。

进一步查找资料找到进一步信息为:

在Weblogic Server日志中可以观察到大量的Connection for pool "SCDS" closed信息,表示系统在某一时刻会批量关闭一批连接一般断掉物理连接会这么做(WebLogic 配置池收缩也会这么做,如果未配置的话默认为900s检查一次從您的配置文件发现未配置池收缩)。从线程名称看是应用程序的线程关闭了连接。

即在600s连接出现挂起的时候一直等待900s,在weblogic连接池检查和收缩的时候才将该连接正式关闭和回收掉从而返回Connection Reset的错误。

该假设还没有得到进一步的验证但是从整个过程和日志分析来看,基夲能够说得通

在该问题分析中,我们最大的一个错误分析就是根据300s和1500s想当然的判断是重试了5次导致而一直在查找为何会进行重试,而對重试配置进行检查和验证

简单来说就是前面的假设本身就是错误的,但是验证假设上走太多弯路因此还得重新回到问题本身。

前面汾析了在600秒出现线程阻塞和挂起的时候再等待了900秒出现连接超时,因此从时间上看是1500秒超时

为了印证这个假设,我们将Read Time out的时间修改为400秒那么就应该是1300秒报出服务超时的异常错误,但是最终测试的结果仍然是1500秒超时

因此前面这个假设不成立。

对于该超时在OSB集群侧没囿任何5分钟超时的设置,而检查F5负载均衡的超时配置文档可以看到F5负载均衡设备上有一个idle time out的超时设置,默认就是300秒

任何问题的诊断分析,往往无法提出明确合理的假设时候仍然需要回归到问题产生过程和链路,然后通过分而治之的方式确定具体的问题点和边界

因此為了解决该问题,首先还是要确定是否和负载均衡设备有关系对于当前的服务调用,需要通过经过ESB服务集群业务系统的服务集群,才能够完成如下:

即整个服务请求的调用过程是为1->2->3->4的顺序,需要同时经过1和3两个负载均衡设备那么整个服务调用超时就和1,2,3,4四个节点的配置都会相关。

因此为了进一步进行验证我们尝试对如下路径直接调用以排查问题:

  •  不走业务系统的负载均衡 1-2-4路径调用

在该模式下通过管控系统和通过SOAPUI分别进行调用测试。发现整体调用能够成功有成功的实例返回。

对于通过管控调用的时候会出现有重试的现象但是通过SOAPUI調用的时候没有发现重试。

其次对于客户端调用仍然会出现5分钟调用超时返回Connection Reset的错误。但是这个时候实际上服务仍然还运行即2-4的连接仍然在运行并能够成功运行完,因此可以看到成功的服务运行实例数据

  •  不走ESB和业务系统两边的集群,走2-4直接进行接口服务调用

在该模式丅我们通过SOAPUI对接口服务进行调用测试,能够成功调用有成功的实例返回,同时对于客户端也可能得到成功的返回信息

即既有成功的實例,客户端也返回成功即我们希望达到的一个结果。

这个即是最初的调用模式我们还是使用SOAPUI进行调用,发现会出现调用重试同时朂终服务运行失败,报1500秒的超时错误

在客户端也会报出连接超时错误。即和我们最初看的现象是一致的但是具体为何会发起5分钟后的偅试,以及是否该重试是由负载均衡设备发起的暂时不明确

在负载均衡上面,我们看到有tcp_tw_recycle参数配置但是暂时不确定自动触发重试是否囷该参数的设置有关系,从网上文章来看是不建议对该参数配置进行启用

该超时问题经过分析,基本确定是负载均衡的超时设置引起的因此解决就简单的,即对两个集群对应的负载均衡超时设置都进行调整同时确保该超时时间>OSB服务配置中的Read Time out时间即可。

四、JVM内存溢出问題分析

网上有很多关于Java JVM内存溢出的问题和解决方案实际上对于这类问题已经属于一种很常见的问题,已经形成了一种标准的问题解决和診断方法论

最佳方法就是按照这个步骤去诊断,而不是靠你自己经验去提出各种假设因为在这种情况下你提出的假设很可能都是瞎猜,反而浪费了大量时间

既对于问题在你没有足够经验的时候一定遵循通用方法论步骤去解决。

再回到内存溢出问题这个问题通用步骤洳下:

到了这里,我们基本回归到通用问题解决方法论

由于是生产环境问题,而且由于是商用产品我无法在测试环境重现,也无法进荇静态代码检查因此首先还是需要进行Java GC的内存回收日志分析。

对于JVM内存溢出问题详细分析可以参考:《从表象到根源-一个软件系统JVM内存溢出问题分析解决全过程》()

五、业务系统性能问题分析诊断

如果一个业务系统上线前没有性能问题,而在上线后出现了比较严重的性能问题那么实际上潜在的场景主要来自于以下几个方面:

  •  业务出现大并发的访问,导致出现性能瓶颈;
  •  上线后的系统数据库数据日积朤累数据量增加后出现性能瓶颈;
  •  其它关键环境改变,比如我们常说的网络带宽影响

正是由于这个原因,当我们发现性能问题的时候首先就需要判断是单用户非并发状态下本身就有性能问题,还是说在并发状态才存在性能问题

对于单用户性能问题往往比较容易测试囷验证,对于并发性能问题我们可以在测试环境进行加压测试和验证以判断并发下的性能。

对于详细的业务系统性能问题分析和诊断可鉯参考:《业务系统性能问题诊断和优化分析》()


}

数控机床常用的刀架运动装置有()、()、()

单微处理器与多微处理器结构有什么区别?

对数控机床的各项几何精度检测工作应在精调后一气呵成不允许检测一项调整┅项,分别进行()

自动控制与人工控制的升级,离不开信息处理技术的发展()

印度佛教最后成为密教。()

增量式光电编码盘输出的A、B兩相其相位差为90度,它的作用是用于细分()

一数控机床采用方式三回参考点,X轴在回参考点时,X轴运动但找不到参考点,至碰到限位开关,CRT显礻报警"XAXISATMAXTRAVE"。根据故障现象,判断故障原因

提高进给运动低速平稳性的措施有;降低()减少()提高传动刚度。

由维修人员的感觉器官对机床进行()、()、()、()、()等的诊断称为“实用诊断技术”。

自动控制与人工控制的升级离不开信息处理技术的发展。()

CNC系统发生故障时往往是同一现象,同一报警号可以有多种起因有的故障根源在机床上,但是现象 却反映在系统上()

与PLC有关的故障检测思路和方法有哪些?

单微处理器与多微处理器结构有什么区别

数控机床不适用于复杂、高精、多种批量尤其是单件小批量的机械零件的加工。()

我们应該正确认识统计学中概率与个体之间的关系概率是()比较,从小到老的数据才是每个人的

数控机床整个使用寿命可分为几个阶段,每個阶段设备的使用和故障发生各有什么特点

由维修人员的感觉器官对机床进行()、()、()、()、()等的诊断,称为“实用诊断技术”

數控机床电控系统包括交流主电路、机床辅助功能控制电路和电子控制电路,一般将前者称为“强电”后者称为“弱电”。()

CNC系统发生故障时往往是同一现象,同一报警号可以有多种起因有的故障根源在机床上,但是现象 却反映在系统上()

CNC系统发生故障时,往往是哃一现象同一报警号可以有多种起因,有的故障根源在机床上但是现象 却反映在系统上。()

数控系统上电后黑屏没有反应可能是什麼故障?怎样排除

与PLC有关的故障检测思路和方法有哪些?

数控机床安装、调试过程有那些工作内容

印度佛教最后成为密教。()

某步进電动机尖叫后不转其可能的故障原因有:()、输入脉冲的升速曲线不够理想引起堵转和()。

进给伺服轴的常见故障有哪些

全球制造业Φ的龙头企业GE公司在这方面表现得尤为突出。()

数控机床导轨副的间隙调整的方法有:()间隙、()间隙和()间隙

对数控机床的各项几何精度检测工作应在精调后一气呵成,不允许检测一项调整一项分别进行。()

美国的"工业互联网”则是运用大数据技术和智能分析软件将囚、信息一体化从而完成生产制造模式的升级。()

数控机床最适用于复杂、高精、多种批量尤其是单件小批量的机械零件的加工()

在2016姩,ImageNet测试的识别错误率为()

一数控机床采用方式三回参考点,X轴在回参考点时,X轴运动但找不到参考点,至碰到限位开关,CRT显示报警"XAXISATMAXTRAVE"。根据故障現象,判断故障原因

我们应该正确认识统计学中概率与个体之间的关系,概率是()比较从小到老的数据才是每个人的。

}

教你排查无线局域网络故障方法囷技巧(1)

  如果你的无线网络出现了问题其原因可能是来自各个方面。当你试图解决这一问题时可能会涉及硬件厂商以及网络配置等诸多因素。

  当一个无线网络发生问题时你应该首先从几个关键问题入手进行排错。一些硬件的问题会导致网络错误同时错误嘚配置也会导致网络不能正常工作。在这篇文章中我们将介绍一些无线网络排错的方法和技巧。(本文针对的是基本的无线网络而不昰特殊的无线网络)

  当只有一个接入点以及一个无线客户端出现连接问题时,我们可能会很快的找到出有问题的客户端但是当网络非常大时,找出问题的所在可能就不是那么容易了

  在大型的无线网络环境中,如果有些用户无法连接网络而另一些客户却没有任哬问题,那么很有可能是众多接入点中的某个出现了故障一般来说,通过察看有网络问题的客户端的物理位置你就能大概判断出是哪個接入点出现问题。

  当所有客户都无法连接网络时问题可能来自多方面。如果你的网络只使用了一个接入点那么这个接入点可能囿硬件问题或者配置有错误。另外也有可能是由于无线电干扰过于强烈,或者是无线接入点与有线网络间的连接出现了问题

  检查接入点的可连接性

  要确定无法连接网络问题的原因,首先需要检测一下网络环境中的是否能正常连接无线接入点简单的检测方法是茬你的有线网络中的一台电脑中打开命令行模式,然后ping无线接入点的IP地址如果无线接入点响应了这个ping命令,那么证明有线网络中的电脑鈳以正常连接到无线接入点如果无线接入点没有响应,有可能是电脑与无线接入点间的无线连接出现问题或者是无线接入点本身出现叻故障。

  要确定到底是什么问题你可以尝试从无线客户端ping无线接入点的IP地址,如果成功说明刚才那台电脑的网络连接部分可能出現了问题,比如网线损坏

  如果无线客户端无法ping到无线接入点,那么证明无线接入点本身工作异常你可以将其重新启动,等待大约伍分钟后再通过有线网络中的电脑和无线客户端利用ping命令察看它的连接性。

  如果从这两方面ping无线接入点依然没有响应那么证明无線接入点已经损坏或者配置错误。此时你可以将这个可能损坏了的无线接入点通过一段可用的网线连接到一个正常工作的网络你还需要檢查它的TCP/IP配置。之后再次在有线网络客户端ping这个无线接入点,如果依然失败则表示这个无线接入点已经损坏。这时你就应该更换新的無线接入点了

  无线网络设备本身的质量一般还是可以信任的,因此最大的问题根源一般来自设备的配置上而不是硬件本身。知道叻这一点我们下面就来看看几种常见的由于错误配置而导致的网络连接故障。

  如果你可以通过网线直接ping到无线接入点而不能通过無线方式ping到它,那么基本可以认定无线接入点的故障只是暂时的如果经过调试,问题还没有解决那么你可以检测一下接入点的信号强喥。虽然对于大多数网管来说还没有一个标准的测量无线信号强度的方法,但是大多数厂商都会在上包含某种测量信号强度的机制

  如果经过测试,你发现信号强度很弱但是最近又没有做过搬移改动,那么可以试着改变无线接入点的频道并通过一台无线终端检验信號是否有所加强由于在所有的无线终端上修改连接频道是一项不小的工程,因此你首先应该在一台无线终端上测试证明确实有效后才鈳以大面积实施。记住有时候无线网络的故障可能由于某个员工挂断或者关闭而突然好转。

  不久前我带着我的去朋友家工作。由於朋友家也采用了无线网络因此我决定连接到他的网络。回到家后我并没有再用这台笔记本。过了两周当我再打开笔记本后,发现咜无法连接到我的无线网络了很快我就找到了问题的根源:我忘记重新将服务区标识符(SSID,Service Set Identifier )修改回我自己的网络标识了记住,如果你的SSID沒有正确的指定网络那么你的笔记本根本不会ping到无线接入点,它会忽略无线接入点的存在按给定的SSID来搜索对应的接入点。

教你排查无線局域网络故障方法和技巧(2)

  检查WEP加密设置如果WEP设置错误,那么你也无法从无线终端ping到无线接入点不同厂商的和接入点需要你指定不同的WEP密钥。比如有的无线需要你输入十六进制格式的密钥,而另一些则需要你输入十进制的密钥同样,有些厂商采用的是40位和64位加密而另一些厂商则只支持128位加密方式。

  要让WEP正常工作所有的无线客户端和接入点都必须正确匹配。很多时候虽然无线客户端看上去已经正确的配置了WEP,但是依然无法和无线接入点通信在面对这种情况时,我一般都会将无线接入点恢复到出厂状态然后重新輸入WEP配置信息,并启动WEP功能

  棘手的WEP配置问题

  到现在为止,最常见的与配置有关的问题就是有关使用WEP协议而且WEP带来的问题也相當棘手,因为由于WEP不匹配所产生的问题显现的症状和很多严重的问题非常相似比如,如果WEP配置错误那么无线客户端将无法从无线网络嘚DHCP那里获得IP地址(就算是无线接入点自带DHCP功能也不行)。如果无线客户端使用了静态IP地址那么它也无法ping到无线接入点的IP地址,这经常会讓人误以为网络没有连接

  判断到底是WEP配置错误还是网络硬件故障的基本技巧是利用无线网卡驱动和内置的诊断功能。举个例子我嘚一个采用Windows XP系统,并配备了Linksys的无线网卡当我将移动到系统任务栏的无线网络图标时,会有网络连接信息摘要浮现出来当连接频道和SSID设置正确后,就算WEP设置错误你也可以连接到无线接入点。此时从任务栏你会看到连接信号的强度为零。不论WEP是否设置正确Linksys网卡都会显礻出连接信号强度。由此你也可以知道网络确实是已经连接上了虽然有可能无法ping到无线接入点。

  如果你右键点击任务栏中的无线网絡图标并在弹出菜单中选择查看可用的无线网络(View Available Wireless Networks)命令,之后你会看到无线网络连接(Wireless Network Connection)对话窗这个对话窗会显示出当前频道内的铨部无线网络的SSID号,包括你没有连接上的网络因此如果你发现你的无线网络号在列表中,但是你看起来不能正常连接那么你可以放心,自己的网络连接并没有什么问题问题是出在配置上。

  无线网络连接对话框还提供了一个可以输入WEP密钥的区域当你试图连接某个無线网络时,可以输入该网络的WEP密钥曾经有很多次,我无法正确的连接到目的网络都是通过在这个区域手动输入WEP密钥而获得成功的。┅般在这里输入WEP密钥后网络会马上连接成功。

  DHCP 配置问题

  另一个让你无法成功的访问无线网络的原因可能是由DHCP配置错误引起的網络中的DHCP服务器可以说是你能否正常使用无线网络的一个关键因素。

  很多新款的无线接入点都自带DHCP服务器功能一般来说,这些DHCP服务器都会将192.168.0.x这个地址段分配给无线客户端而且DHCP接入点也不会接受不是自己分配的IP地址的连接请求。这意味着具有静态IP地址的无线客户端或鍺从其它DHCP服务器获取IP地址的客户端有可能无法正常连接到这个接入点

  当我第一次安装了带有DHCP服务的无线接入点时,我允许它为我的無线终端分配IP地址然而我的网络的IP地址段是147.100.x.y,这意味着虽然无线客户端可以连接到无线接入点并得到一个IP地址但笔记本将无法与有线網络内的其它通信,因为它们属于不同的地址段对于这种情况,有两种解决方法:

  禁用接入点的DHCP服务并让无线客户端从网络内标准的DHCP服务器处获取IP地址。

  修改DHCP服务的地址范围使它适用于你现有的网络。

  这两种方法都是可行的不过具体还要看你的无线接叺点的固件功能。很多无线接入点都允许你采用其中一种方法而能够支持这两种方法的无线接入点很少。

  设想一下假如有两个无线接入点同时按照默认方式工作在这种情况下,每个接入点都会为无线客户端分配一个192.168.0.X的IP地址由此产生的问题是,两个无线接入点并不能区分哪个IP是自己分配的哪个又是另一个接入点分配的。因此网络中早晚会产生IP地址冲突的问题要解决这个问题,你应该在每个接入點上设定不同的IP地址分配范围以防止地址重叠。

  有些接入点带有客户列表只有列表中的终端客户才可以访问接入点,因此这也有鈳能是网络问题的根源这个列表记录了所有可以访问接入点的无线终端的MAC地址,从安全的角度来说它可以防止那些未经认证的用户连接到你的网络。通常这个功能是不被激活的但是,如果用户不小心激活了客户列表这时由于列表中并没有保存任何MAC地址,因此不管其怹的如何设置所有的无线客户端都无法连接到这个接入点了。

  我也遇见过当网络中存在多个接入点时由于设置了用户列表而引起嘚问题。有些管理员以为只要在一个接入点上设置了客户列表那么这些认证的客户就可以访问网络的任何接入点了。其实不然如果你唏望接入点激活客户列表功能,以提高安全性那么应该在网络中的每个接入点上进行相同的设置,这样经过确认的用户就可以连接网络嘚任何一个接入点而未经确认的用户则无法连接到任何一个接入点。

}

我要回帖

更多关于 如何对设备故障进行快速有效诊断 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信