大型网站典型故障

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

故障现象:

某应用主要功能是管理用户图片,但是上传图片突然非常慢。

原因分析:

检查存储服务器,发现大部分文件只有几百 KB,而有几个文件非常大,有数百兆,读写这些大文件一次需要几十秒,这段时间,磁盘基本被这个文件独占,导致其他用户的文件操作缓慢。

经验教训:

存储的使用需要根据不同文件类型和用途进行管理,图片都是小文件,应该使用专用的存储服务器,不能和大文件共用存储。批处理用的大文件可以使用其他类型的分布式文件系统。

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

故障现象:

某应用发布后,数据库 Load 居高不下,远超正常水平,持续报警。

原因分析:

检查数据库,发现报警是因为某条 SQL 引起的,这条语句执行频率很高,远超正常水平。追查这条 SQL,发现被网站首页调用。

经验教训:

  • 首页不应该访问数据库,首页需要的数据可以从缓存服务器或者搜索引擎服务器获取。
  • 首页最好是静态的。

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

故障现象:

某应用服务器不定时地因为响应超时而报警,但是很快又超时解除,恢复正常,如此反复。

原因分析:

程序中某个单例对象中多处使用了synchronized(this),由于this对象只有一个,所有的并发请求都要排队获得这唯一的一把锁。一般情况下,都是一些简单操作,获得锁,迅速完成操作,释放锁,不会引起线程排队。但是某个需要远程调用的操作也被加了 synchronized(this),这个操作只是偶尔会被执行,但是每次执行都需要较长的时间才能完成,这段时间锁被占用,所有的用户线程都要等待,响应超时,这个操作执行完后释放锁,其他线程迅速执行,超时解除。

经验教训:

使用锁操作要谨慎。

你可能感兴趣的:(大型网站典型故障)