2013-11-9 做的一次系统宕机诊断及总结

标签: 系统 宕机 诊断 | 发表时间:2013-11-14 16:43 | 作者:guogang83
出处:http://blog.csdn.net

        首先交代一下系统的基本情况,开发是J2EE架构,最流行的那种,部署架构是weblogic+oracle 。2013-11-11接到现场实施人员反馈在9日上午(周六)有宕机并发回了weblogic的server.log 。

       1.  从server.log中看到在 08时25分49秒有stuck<2013-11-9 上午08时25分49秒 GMT+08:00> <Error> <WebLogicServer> <BEA-000337> <[STUCK] ExecuteThread: '18' for queue: 'weblogic.kernel.Default (self-tuning)' has been busy for "630" seconds working on the request "Http Request: /web/XXX/servlet/exportExcel", which is more than the configured time (StuckThreadMaxTime) of "600" seconds. Stack trace:

        在 08时25分49秒09时28分31秒之间有四次导出,造成了最终的内存溢出。

        在<2013-11-9 上午09时28分31秒 GMT+08:00>Exception in thread "Thread-10" java.lang.OutOfMemoryError: Java heap space

       2. 由于系统稀烂的抛错机制,不能定位到代码,所以也不知道是哪个功能。

       3. 因为系统记录用户点菜单的操作,所以可以查询期间用户点了哪些菜单,然后看这些菜单哪个有导出,这个方法不是特别好,我决定采用另一个方案。

       4. 首先我要实施组把现场的access.log发回来,通过系统stuck的时间减去线程堵塞的时间,我找到了当时的请求是一个功能的导出,事情总算有点眉目。

       5. 这个还不算,要现场把8:00-9:00 ,9:00-10:00 之间的数据库AWR发回来,从报告上可以定位到就是此功能的导出,通过SQL_ID找到当时的执行计划和绑定变量,填上去后在现场数据库上(只是统计导出的条数),有5万多条记录,这个就是问题所在了(之前做过实验,导出4万条数据,有15个字段,消耗的内存接近400M)。注意的是,在AWR中这条SQL的执行时间可能很短,原因是AWR只记录SQL的解析和执行时间,返回记录的时间是不记录的。所以看到AWR的负载不高,也不能代表没有问题。

       6. 导出大量的数据,一是大量消耗weblogic的内存,二是产生stuck线程,堵塞系统,造成大量排队,接下来就是内存溢出。跟开发反馈这个功能的问题,开发起初说这个模块导出限制在1万条以内,有过了一会,说有个地方遗漏了。

        宕机场景回放:在某个周六,用户点了一个没有加限制的导出,等了一会后发现没有反应,在接下来的时间里,连续点了多次,直到系统宕机,看到系统没反应后说:什么破系统,又不能用了。

       总结:要总结的东西太多了, 从宕机的诊断分析来说,首先从weblogic定位出大致出现的问题,如可能是网络的问题,可能是数据库不可用的问题,可能是代码级的问题等。明确方向后就要从多个维度找证据,视野要开阔,最好是懂业务,不懂也要去学。

      最应该总结的是我们系统分析师。作为系统分析师,在系统设计之初就应该能估计到数据规模的增长,有些系统分析师说我估计不出来。细想一下他的说法占不住脚,现在的系统不是凭空出来的,是实际发生的业务,都是可能通过用户使用的单据上评估出业务量,往往只是人懒罢了。最后这个功能通过系统分析师分析,限制在导出3千条数据。

      其次应该总结的是我们的开发人员,在做这个导出的时候,完全可以做出一个进度条,可以做出一个防连续点击的效果。这样用户就不会使劲的点,相当于给系统有加了一个保险。

作者:guogang83 发表于2013-11-14 8:43:01 原文链接
阅读:99 评论:1 查看评论

相关 [系统 宕机 诊断] 推荐:

2013-11-9 做的一次系统宕机诊断及总结

- - CSDN博客数据库推荐文章
        首先交代一下系统的基本情况,开发是J2EE架构,最流行的那种,部署架构是weblogic+oracle. 2013-11-11接到现场实施人员反馈在9日上午(周六)有宕机并发回了weblogic的server.log.         在 08时25分49秒和 09时28分31秒之间有四次导出,造成了最终的内存溢出.

某物流系统数据库故障诊断

- - SQL - 编程语言 - ITeye博客
某物流公司新上一套软件系统,数据库CPU占用率基本维持在80%以上,业务高峰期数据库宕机. 重做日志缓冲区的已使用的空间达到三分之一时. 当dbwn进程向磁盘写入已修改的缓冲区的时候. 用户提交事务处理时的一条提交记录(经常commit会及时刷新重做日志缓冲区空间). 重做日志缓冲区的已使用的空间达到三分之一时.

大型系统在线问题诊断与定位

- - 掘金 架构
本文是武汉 gopher meetup 的分享内容整理而成,分享内容在 “无人值守” 的两篇和其它社区分享中亦有提及. (也就是说你看过那两篇,这个可以不用看了). 混口饭吃也是不容易,既然有问题了,我们还是要解决的. 要先看看有没有现成的思路可以借鉴. Google 在 这篇论文里提到过其内部的线上 profile 流程:.

Twitter宕机:两套数据系统同时出现故障

- - 博客园_新闻
但只有当那些神秘的数据中心停止工作时,我们才能发觉和这个世界的联系其实是在这些 0 和 1 之上. 位于美国加州中部的萨克拉门托(Sacramento)有三个身份:1850年代的淘金人口集散地、如今的加州州府和 Twitter 的数据中心. 7月 26 日上午 8 点 20 分,这个数据中心停止了工作.

网易轻舟云原生故障自动诊断系统实践

- - InfoQ推荐
Kubernetes 是一个生产级的容器编排引擎,但是 Kubernetes 仍然存在系统复杂、故障诊断成本高等问题. 网易内部在基于 Kubernetes 落地轻舟云原生体系时遇到了不少问题,主要包括以下几个维度:. 由 Kubernetes 以及 Docker 的 Bug 引起的故障. 内核 Bug 导致的故障.

【分布式系统工程实现】如何检测一台机器是否宕机?

- Michael Liao - 淘宝核心系统团队博客
检测一台机器是否宕机的应用场景如下:. 1, 工作机器宕机,总控节点需要能够检测到并且将原有服务迁移到集群中的其它节点. 2, 总控节点宕机,总控节点的备份节点(一般称为Slave)需要能够检测到并替换成主节点继续对外服务. 检测一台机器是否宕机必须是可靠的. 在大规模集群中,机器可能出现各种异常,比如停电,磁盘故障,过于繁忙导致假死等.

如何诊断CDN故障

- - 火丁笔记
某项目使用CDN做文件下载服务,最近不时有网友反馈下载出错,因为CDN是第三方提供的,且节点众多,所以诊断起来有点麻烦,必须想想招儿. 首当其冲的问题是如何确认CDN有哪些节点. 幸运的是通过 阿里测提供的服务,我们能拿到这个IP列表,当然这个IP列表不可能百分百完整,不过应该包含了大部分的节点,有兴趣的可以参考 百度的JQuery CDN例子.

JVM诊断调优CheatSheet

- - ImportNew
使用top去获取进程cpu使用率;使用/proc文件查看进程所占内存. 查看类的一些信息,如字节码的版本号、常量池等. 查看进程的gc情况. jstat -gcutil [pid] (显示总体情况). jstat -gc [pid] 1000 10(每隔1秒刷新一次 一共10次). 查看jvm内存使用状况.

初步诊断你的 GC

- - IT瘾-dev
本文是好友阿飞写的,并且经过作者同意发的原创. 阿飞Javaer,转载请注明原创出处,谢谢. JVM的GC机制让Java程序员省去了自己垃圾回收的烦恼,大大提高了生产效率. 但是正因为JVM垃圾回收机制足够优秀,导致很多Java程序员对JVM这个黑盒了解甚少,很多人没有去了解它,很多人也没机会去了解它.

使用pt-stalk诊断MySQL问题

- - haohtml's blog
在MySQL服务器出现短暂(5~30秒)的性能波动的时候,一般的性能监控工具都很难抓住故障现场,也就很难收集对应较细粒度的诊断信息. 另外,如果这种波动出现的频率很低,例如几天才一次,我们也很难人为的抓住现场,收集数据. 这正是pt-stalk所解决的问题. pt-stalk是 Percona-Toolkit的一部分(其前身是 Aspersa的一部分).