写日志也会引发故障

故障现象:某应用服务器集群发布后不久就出现多台服务器相继报警,硬盘可用空间低于警戒值,并且很快有服务器宕机,登录到线上服务器,发现log文件夹里的文件迅速增加,不断消耗磁盘空间。
原因分析:查日志内容发现开发人员将log输出的level全局配置为Debug,这样一次简单的web请求就会产生大量的log文件输出,在高并发的用户请求下,很快就消耗完磁盘空间。
经验:线上的日志输出级别至少为Warn。

高并发访问数据库引发故障

故障现象:某应用发布后,数据库Load居高不下,远超正常水平,持续报警。
原因分析:检查数据库,发现报警是因为某条SQL引起,这条SQL是一条简单的有索引的数据查询,不应该引发报警。继续检查,发现这条SQL执行频率非常高,远超正常水平。追查这条SQL,发现被网站首页应用调用,首页是被访问最频繁的网页,这条SQL被首页调用,也就被频繁执行了。
经验:首页不应该访问数据库,首页需要的数据可以从缓存服务器或者搜索引擎服务器获取;
首页最好是静态的。

高并发情况下锁引发的故障

故障现象:某应用服务器不定时因为响应超时而报警,但是很快又超时解除,恢复正常,如此反复,让运维人员非常苦恼。
原因分析:程序中某个单例对象(Singleton object)中多处使用了synchronized(this),由于this对象只有一个,所有的并发请求都要排队获得这唯一的一把锁。一般情况下,都是一些简单操作,获得锁,迅速完成操作,释放锁,不会引起线程排队。但是某个需要远程调用的操作也被加了synchronized(this),这个操作只是偶然被执行,但是每次执行都需要较长的时间才能完成,这段时间锁被占用,所有的用户线程都要等待,响应超时,这个操作执行完后释放锁,其他线程迅速执行,超时解除。
经验:谨慎使用锁。

缓存引发的故障

故障现象:没有新应用发布,但是数据库服务器突然Load飙升,并很快失去响应。DBA将数据库访问切换到备机,Load也很快飙升,并失去响应。最终引发网站全部瘫痪。
原因分析:缓存服务器在网站服务器集群中的地位一直比较低,服务器配置和管理级别都比其他服务器要低一些。人们都认为缓存是改善性能的手段,丢失一些缓存也没有什么问题,有时候关闭一两台缓存服务器也确实对应用没有明显影响,所以长期疏于管理。结果这次一个缺乏经验的工程师关闭了缓存服务器集群中全部的十几台Mencached服务器,导致了网站全部瘫痪的重大事故。
经验:当缓存已经不仅仅是改善性能,而是成为网站架构不可或缺的一部分时,对缓存的管理就需要提高到和其他服务器一样的级别。

应用启动不同步引发的故障

故障现象:某应用发布后,服务器立即崩溃。
原因分析:应用程序Web环境使用Apache + JBoss的模式,用户请求通过Apache转发JBoss。在发布时,Apache和JBoss同时启动,由于JBoss启动时需要加载很多应用并初始化,花费时间较长,结果JBoss还没完全启动,Apache就已经启动完毕开始接收用户请求,大量请求阻塞在JBoss进程中,最终导致JBoss崩溃。除了这种Apache和JBoss启动不同步的情况,网站还有很多类似的场景,都需要后台服务准备好,前台应用才能启动,否则就会导致故障。这种情况被戏称:“姑娘们还没穿好衣服,老鸨就开门迎客了。”
经验:就本例来说,在应用程序中加入一个特定的动态页面(比如只返回OK),启动脚本先启动JBoss,然后在脚本中不断用curl命令访问这个特定页面,直到收到OK,才启动Apache。

大文件读写独占磁盘引发故障

故障现象:某应用主要功能是管理用户图片,接到部分用户投诉,表示上传图片非常慢,原来只需要一两秒,现在需要几十秒,有时等半天结果浏览器显示服务器超时。
原因分析:图片需要使用存储,最有可能出错的地方是储存服务器。检查存储服务器,发现大部分文件只有几百KB,而有几个文件非常大,有数百兆,读写这些大文件一次需要几十秒,这段时间,磁盘基本被这个文件操作独占,导致其他用户的文件操作缓慢。
经验:存储的使用需要根据不同文件类型和用户进行管理,图片都是小文件,应该使用专用的存储服务器,不能和大文件共用存储。批处理用的大文件可以使用其他类型的分布式文件系统。

滥用生产环境引发的故障

故障现象:监控发现某个时间段,某些应用突然变慢,内部网络访问延迟非常厉害。
原因分析:检查发现,该时段内网卡流量也下降,但是没有找到原因。过了一阵子才知道,原来有工程师在线上生产环境进行性能压力测试,占用了大部分交换机带宽。
经验:访问线上生产环境要规范。网站数据库有专门DBA维护,如果发现数据库存在错误记录,需要进行数据订正,必须走数据订正流程,申请DBA协助。于是就有工程师为避免麻烦,直接写一段数据库更新操作代码,悄悄放到生产环境上执行,如更新影响大量数据,会导致系统处于假死状态,如果更新错了数据,后果更严重。

不规范的流程引发的故障

故障现象:某应用发布后,数据库Load迅速飙升,超过报警值,回滚发布后报警消除。
原因分析:发现该应用发布后出现大量数据库读操作,而这些数据本来应该从分布式缓存读取。检查缓存,发现数据已经被缓存了。检查代码,发现访问缓存的那段代码被注释掉了。原来工程师在开发的时候,为了方便测试,特意注释掉读取缓存的代码,结果开发完成后忘记把注释去掉,直接提交到代码库发布到线上环境。
经验:代码提交前使用diff命令进行代码比较,确认没有提交不该提交的代码。

不好的编程习惯引发的故障

故障现象:某应用更新某功能后,有少量用户投诉无法正常访问该功能,一点击就显示出错信息。
原因分析:分析这些用户,都是第一次使用该功能,检查代码,发现程序根据历史使用记录构造一个对象,如果该对象为null,就会导致NullPointException。
经验:编写健壮的代码。

摘自《大型网站技术架构》–李智慧

大型网站典型故障案例分析相关推荐

  1. 第十三章 大型网站典型故障分析案例(待续)

    ······ 转载于:https://www.cnblogs.com/hzzjj/p/9825806.html

  2. 五个 PostgreSQL 典型故障案例及处理

    1.PostgreSQL数据库错误:检测到ShareLock死锁处理 PostgreSQL 是一个免费数据库,对于处理分析型+交易型混合型系统来说确实很不错,特别是版本的升级到11.2后性能提升很多, ...

  3. 电池管理系统(BMS)功能与作用/BMS 故障分析方法/15种常见故障案例分析

    提示:本篇文章仅供学习参考 文章目录 一.电池管理系统(BMS)功能与作用 二.BMS 故障分析方法 三.15种常见故障案例分析 一.电池管理系统(BMS)功能与作用 从整车角度,电池管理系统(BMS ...

  4. HCIA-RS自用笔记(13)路由典型问题案例分析、动态路由概述

    路由典型问题案例分析(7/19,27min) Windows配置路由 示例:> route PRINT> route PRINT -4> route PRINT -6> rou ...

  5. Netty消息接收类故障案例分析

    <Netty 进阶之路>.<分布式服务框架原理与实践>作者李林锋深入剖析Netty消息接收类故障案例.李林锋此后还将在 InfoQ 上开设 Netty 专题持续出稿,感兴趣的同 ...

  6. 手机信息采集 ——基于ebay网站Apple手机案例分析

    手机信息采集 --基于ebay网站Apple手机 在本案例分析中,我们要采集的是ebay网站上销售们的众多手机的价格.消费者评分和产品识别码等数据.ebay销售的产品很广,让我们能对每家大型手机生产商 ...

  7. python图像开闭区间_自动开闭器不良故障案例分析

    问题:怎样才能每天收到这种文章? 答案:点击上方蓝色字体,再点击关注即可! 一.故障概况 某年10月26日13:00分,某站的16/18号道岔在排列进路时,从定位操纵到反位时,反位无表示. 二.监测数 ...

  8. 大型网站性能监测、分析与优化常见问题QA

    @tanwen110 (唐文),曾负责腾讯四大平台之一网络媒体平台的整体运维.运营规划工作:曾任百度T7架构师和百度性能优化TOPIC.百度UAQ.APM平台负责人:畅销书<海量运维.运营规划之 ...

  9. 大型 网站成长过程的分析笔记===通过广告来来学习,重要的是思路

    1.初始架构 2.应用服务与数据分离 3.使用缓存改善网站性能 4.应用服务器集群化 5.数据库读写分离 6.使用反向代理和CDN 7.使用分布式FS和分布式DBS 8.使用NoSQL和搜索引擎 9. ...

最新文章

  1. 痛苦是能让人成长的,所以不要害怕遇到痛苦
  2. 支持百亿请求的微博广告运维技术实践
  3. 「APIO2018」选圆圈
  4. ajax练习,ajax练习
  5. python php array,python处理PHP数组文本文件实例
  6. Ubuntu系统如何安装nodejs及npm
  7. spark rdd reduceByKey示例
  8. 列一下OOP规约,编程的时候共勉!别踏坑!
  9. java压缩/解压缩zip格式文件
  10. “动态规划”这词太吓人,其实可以叫“状态缓存”
  11. STC51-串口通信
  12. 网页制作之CSS超级技巧
  13. 蓝桥杯2018年第九届C/C++省赛B组第二题-明码
  14. unity api中文手册_unity 中文API之Display
  15. 解决VuePHP跨域请求
  16. fedora14更新yum源
  17. 小技巧分享:电脑屏幕亮度怎么调?
  18. 排序算法总结(Python实现)——(一)
  19. 我的理想计算机作文800字,我的理想作文800字(精选五篇)
  20. 爬虫进阶:使用fiddler抓取手机app数据

热门文章

  1. 【知识小课堂】mongodb 之 查询关键词使用
  2. Linux Shell常用技巧(十)
  3. 在安装、重装MySQL时出现could not start the service mysql error:0的错误
  4. Fibonacci数列第n项的log(n)算法
  5. Managing the Lifecycle of a Bound Service
  6. 号和管道符号(|)在不同场景下的使用方法
  7. Java文件操作:文件夹中搜索文件
  8. JVM学习笔记之-垃圾回收相关概念 System.gc()的理解 内存溢出与内存泄漏 STW 垃圾回收的并行与并发 安全点与安全区域 再谈引用:强引用 软引用 弱引用 虚引用 终结器引用
  9. ARP(Address Resolution Protocol)地址解析协议初识
  10. PHP基础入门(五)---PHP面向对象实用基础知识