大型WEB应用性能调优总结

声明
本文为Gleasy原创文章,转载请指明引自Gleasy团队博客

问题初级定位方法: 一感三看
一感,凭个人感觉,操作不流畅,有挫折感肯定有问题。
三看:
一看ajax请求的执行时间,网络条件好的情况下,超过400MS的肯定有问题;
二看静态内容(html,图片,js,css)等是否cache,没有cache肯定有问题;
三看同一个ajax请求的数量,如果连续有N个(N>3)以上同一个AJAX请求,肯定有问题;

问题深入定位方法
方法一:使用stopwatch,在程序中植入log记录执行时间,通过查看执行时间以定位出问题的代码段;
方法二:间隔重复可疑操作,观察记录CPU变化情况。用以观察是否有死循环或者大规模遍历。
方法三:恶意快速重复点击同一个功能按键20次,观察是否会重复发起后端请求20次,如果是,那么,也是有问题的。
方法四:使用SQL监控(druid)来观察每一个SQL执行次数,执行时间,从而发现热点问题

应用技巧
NO1. 弱化数据库
1.将数据库弱化为“存储”,避免使用数据库查询能力,尽量使用主键或唯一键进行精确读取动作,数据量不太大的表可以使用普通索引进行精确读取,避免使用范围查询(> < != between in),禁止使用like,禁止使用子查询,联合查询,exists查询;
2.范围查询和like查询,一律使用索引平台CloudIndex替代;
3.子查询,联合查询,exists查询:一律在应用层进行逻辑拼装(如果数据量太大,可以使用Map-Reduce进行多线程计算,如果再大可以使用cloudjob进行分布式调度)

NO2. 善用缓存
1.提高缓存命中率为终极目标;
2.容易忽视的缓存问题:大量访问己被删除数据,由于数据不存在,缓存肯定不命中,导致频频访问数据库;解决方法是对己删除的数据做特殊缓存标记;
3.对写入性能要求极为苛刻的场景可以使用redis缓存-存储切换的方式进行异步写入:写入redis(标记为存储),立刻返回,另起独立线程将写入数据同步至数据库,同步成功之后,将redis中相应数据标记为缓存。

NO3. 用好中间件
1. 对于写入性能要求苛刻(或写入并发量特别大的)且允许写入延迟的情况,使用CloudMQ中间件;比如发邮件,发微博,发留言等;
2. 定时任务(比如定时发送邮件,定时提醒),特别适合使用CloudJob中间件
3. 对于消耗性任务(比如执行时间长且任务量大,消耗CPU资源),可以使用CloudJob进行分布式任务调度,将众多大任务放到N台后台机器上执行;

NO4. 批量操作(从前端到后端)
1. 前端批量,针对大量重复调用某一接口的情况,由于AJAX的异步性,可以将N个请求合并成一个请求,串行执行AJAX,策略如下(伪代码):

01 var getDepartmentLinkByUid = function(uid,callback){
02   if(loading){cache.push({uid:uid,callbackup:callback}); return;}
03   loading = true;
04   realGet();
05 }
06  
07 var realGet = function(){
08  var tmp = cache.splice(0);
09  $.ajax({
10     data:由tmp的uid拼接而成,
11     success:function(dt){
12       for(var i=0;i<tmp.length;i++){
13         var uid = tmp[i].uid;
14         var rdata = dd[tt];
15         tmp[i].callback(rdata);
16       }
17       if(cache.length>0)  realGet();
18     }
19   });
20 }

2. 缓存批量(承接上面的例子)

1 objects = mget(uids);
2 notcached = new ArrayList();
3 for(uid:uids){
4  if(objects 不包含uid) notcached.add(uid);
5 }

3. 数据库批量查询(承接上面的例子),批量更新缓存

view source

1 notcachedData = select * from department where uid in (notcached列表);
2 mset(notcachedData 生成的 map);
时间: 2024-11-07 20:25:25

大型WEB应用性能调优总结的相关文章

web前端性能调优

web前端性能调优 最近2个月一直在做手机端和电视端开发,开发的过程遇到过各种坑.弄到快元旦了,终于把上线了.2个月干下来满满的的辛苦,没有那么忙了自己准备把前端的性能调优总结以下,以方便以后自己再次使用到的时候得于得心应手.参照了<高性能网站建设指南-前端工程师技能精髓>,本文主要主要概述前端的性能调优的方法. 第一条优化:减少http请求 一想到调优好多人都会想到减少http请求,但是可能好多人都会不知道具体操作,我一开始也不知道.项目刚好使用fis发现fis可以打包脚本和样式表.perf

web及性能调优

nginx 的性能调优 1 修改CPU的核心数对应的Nginx work进程 这个一般是你CPU核心数的两倍,方正是倍数,具体要几倍可看具体硬件配置 2 修改文件描述符  65536 ulimit -n 永久生效可改/etc/sysctl.conf 3 修改Linux内核的调度算法    epoll 4 修改连接数  在理论上来讲是工作进程数* 连接数 但是,Nginx的理论并发值是65536,所以 ..... 你懂得 5 在多少时间之内要达到多少的并发量就缓存,否则......  你懂得 6

36套精品Java高级课,架构课,java8新特性,P2P金融项目,程序设计,功能设计,数据库设计,第三方支付,web安全,高并发,高性能,高可用,分布式,集群,电商,缓存,性能调优,设计模式,项目实战,大型分布式电商项目实战视频教程

新年伊始,学习要趁早,点滴记录,学习就是进步! QQ:1225462853 视频课程包含: 36套Java精品高级课架构课包含:java8新特性,P2P金融项目,程序设计,功能设计,数据库设计,架构设计,web安全,高并发,高性能,高可用,高可扩展,分布式,集群,电商,缓存,性能调优,设计模式,项目实战,工作流,程序调优,负载均衡,Solr集群与应用,主从复制,中间件,全文检索,Spring boot,Spring cloud,Dubbo,Elasticsearch,Redis,ActiveMQ

java架构师课程、性能调优、高并发、tomcat负载均衡、大型电商项目实战、高可用、高可扩展、数据库架构设计、Solr集群与应用、分布式实战、主从复制、高可用集群、大数据

15套Java架构师详情 * { font-family: "Microsoft YaHei" !important } h1 { background-color: #006; color: #FF0 } 15套java架构师.集群.高可用.高可扩展.高性能.高并发.性能优化.Spring boot.Redis.ActiveMQ.Nginx.Mycat.Netty.Jvm大型分布式项目实战视频教程 视频课程包含: 高级Java架构师包含:Spring boot.Spring  clo

记一次Web服务的性能调优

前言 一个项目在经历开发.测试.上线后,当时的用户规模还比较小,所以刚刚上线的项目一般会表现稳定.但是随着时间的推移,用户数量的增加,qps的增加等因素会造成项目慢慢表现出网页半天无响应的状况.在之前的工作中也恰巧遇到这个过程,当时对项目进行了很多性能测试和调优,今天借助博客园,将这次性能调优的过程进行整理后写成随笔,希望给广大Java后端开发的工程师提供帮助,也借此机会,对性能调优进行一些总结工作,达到备忘的目的. 测试工具与环境 性能测试工具 Loadrunner:一种预测系统行为和性能的负

提高 web 应用性能之 CSS 性能调优

CSS 性能调优 CSS 代码的分析与渲染都是由浏览器来完成的,所以,了解浏览器的 CSS 工作机制对我们的优化有至关重要的作用.这篇文章我们主要从如下几个方面入手来介绍一下 CSS 的性能优化: Style 标签的相关调优 特殊的 CSS 样式使用方式 CSS 缩写 CSS 的声明 CSS 选择器 把 Stylesheets 放在 HTML 页面头部: 浏 览器在所有的 stylesheets 加载完成之后,才会开始渲染整个页面,@import 就相当于是把 <link> 标签放在页面的底部

[转]提高 web 应用性能之 CSS 性能调优

简介 Web 开发中经常会遇到性能的问题,尤其是 Web 2.0 的应用.CSS 代码是控制页面显示样式与效果的最直接“工具”,但是在性能调优时他们通常被 Web 开发工程师所忽略,而事实上不规范的 CSS 会对页面渲染的效率有严重影响,尤其是对于结构复杂的 Web 2.0 页面,这种影响更是不可磨灭.所以,写出规范的.高性能的 CSS 代码会极大的提高应用程序的效率.本文主要来探讨一下如何优化,以及从哪些方面优化应用程序的 CSS 代码,从而最大限度的提高 Web 应用的性能. 回页首 CSS

一文教会你数据库性能调优(附某大型医院真实案例)

原文:一文教会你数据库性能调优(附某大型医院真实案例) 前言 微软工程师的一个工程师曾经对性能调优有一个非常形象的比喻:剥洋葱 .我也非常认可,让我们来一层一层拨开外面它神秘的面纱. 六大因素 下面祭出的是我们在给客户分析数据库性能问题最常用的图. 看完这个图,你是不是对性能调优有了个基本的概念了.通常来讲我们会依照下面的顺序来进行分析: 硬件能力 系统规模 数据库内部因素 软件环境 这4个的顺序可以有所调整或者交换,但是对于系统的性能优化一定要从全局出发.切勿一来就深入到某一个SQL语句的优化

项目总结50:Linux服务器上web项目Java项目性能调优

项目总结50:Linux服务器上web项目Java项目性能调优 最近上线的电商项目,发现非常卡,用户体验非常差,折腾了好久之后,也逐渐找到原因,并针对原因解决方案,先整理总结. 项目基本情况: 1-使用阿里ECS.OSS等一系列相关服务: 2-用户总量1W+,日活量500+ 3-电商项目,有APP.小程序.管理平台三个模块,其中接口150+ 4-项目使用SSM框架: 5-项目tomcat服务,数据库Mysql,Redis放在一个同一个服务器上: 问题表现: 1-接口反应非常慢,导致APP和小程序