叔同淘宝前台系统性能分析与优化讲师介绍•产品技术部-中间件&稳定性平台-叔同•2005年毕业于吉林大学,计算机科学与技术专业;2010年加入淘宝.4年行业软件开发经验,3年互联网开发经验;对构建高性能、可扩展的Web应用十分感兴趣;目前在淘宝Java中间件团队从事性能优化相关的工作:淘宝叔同:jlusdy2优化的目的•提升容量–提升QPS–降低ServerRT–降低服务器成本•提升用户体验–降低响应时间–提升用户体验–提升转化率和交易量3优化的步骤•优化是持续性的工作–衡量现状•Qps•RT•页面大小•每请求内存–设定目标–性能优化4前台系统结构5课程内容•服务器端分析•服务器端优化•浏览器端分析•浏览器端优化6服务器端分析7章节内容1.线上压测2.分析工具3.时间消耗分析4.瓶颈查找8单机压测–Ab•ab-c12-n20000localhost/market.htm–Httpload•http_load-rate300-seconds120item-urls•http_load-parallel40-seconds120item-urls–ApacheNginx分流•非幂等性请求–得到QPS/RT/页面大小/请求内存数–注意事项•Offline机器•避免本机压测•关闭Keepalive•关注系统表现9集群压测–httpload–负载均衡配置–VIPoffline机器–注意事项•凌晨压测•关注系统表现•关注依赖集群表现•相关人员在场10分析工具•OS–top,sar,vmstat,mpstat,iostat,netstat•JVM–jps,jstack,jmap,jstat•GC–Gchisto,PrintGCStats11分析工具•WebXProfiler•TProfiler•BTrace•VisualVM(RemoteEdition),Xming•性能分析平台•OProfile/PerfGoogle-Perftools12服务器端特点•页面模板渲染–Velocity–页面较大•外部调用多–DB,HSF,Tair,Search,TFS•磁盘读写少–Log–Vmcommon•QPS相对较低13时间消耗分析14瓶颈查找•什么是瓶颈–瓶颈是系统中比较慢的部分,在瓶颈完成前,其他部分需要等待•使用TProfiler15一般性瓶颈•CPU计算–字符串查找替换拼接–编码解码–Gzip压缩•外部调用–网络IO开销–序列化反序列化16服务器端优化17章节内容1.软件升级2.JVM调优3.应用自身优化18软件升级•Apache--Nginx–提升10%+•Jboss4--Tomcat7–线程池/NIO–提升10%-•JVM1.6.0_23--1.6.0_32•OS–32bit--64bit–内核升级提升40%•成本最低效果明显19JVM调优•减少majorGC•合理分配堆大小•优化相关参数20PV与GC的关系21吞吐量与GC的关系来源:小邪22选择垃圾收集器23GCPause参考资料24GCPauseTimeYoushouldtrytomaximizethenumberofobjectsreclaimedintheyounggeneration----Tony25JVM堆结构26减少majorGC•减少young晋升到old的对象–合理设置各个分区大小–SurvivorSpaceSize–TenuringThreshold–优化系统代码•及时回收对象•减少内存使用•减小页面大小27合理分配堆大小•线上现状–线上参数扫描•新生代占堆的30%-50%•新生代500M--2560MQPS提升70%28优化相关参数29应用自身优化•优化Velocity•压缩模版大小•设置最佳并发数•代码瓶颈优化•二方包优化•外部调用•其他优化30优化Velocity来源:君山•SketchChartobyte提升100%•解析执行改编译执行提升10%31压缩模板大小•删除空行•删除多余空格•长URL压缩–List减小5%以上•用URL别名–List去掉http:头,减小1%•业务上去重•模板大小和QPS成反比–大小减少10%QPS提升10%32并发数与资源消耗33最佳并发线程•从CPU的角度计算:–并发数=((CPU时间+CPU等待时间)/CPU时间)*CPU数量•从堆内存的角度计算:–并发数=younggc/((小GC时间间隔/rt)*(requestmemory))34代码瓶颈优化•案例–去掉吞异常,CPU使用率提高30%35二方包优化•案例–Beancopy提升20倍以上•可以做一次不做多次–IP库提升1倍•可以提前做的提前做•不受业务影响,永久受益36外部调用•并行HSF•并行搜索•合并外部调用•会降低响应时间,不会提升吞吐量•减少压缩解压–Tairclient•使用更优的序列化协议–ProtocolBuffers–Kryo比PB快20%37其他优化•类中Field要排序–频繁使用的放一起–基本类型引用类型分开放•批量处理数组–按行处理不要按列可以快20倍•使用乐观策略•正确处理异常38其他优化•动态资源静态化•后台依赖前台化–降低复杂度–提升性能•浏览器渲染页面–数据远小于页面的场景•善用缓存–整页缓存39性能黄金法则•80%-90%oftheend-userresponsetimeisspentonthefrontend--SteveSouders40浏览器端分析41章节内容1.基础知识2.请求分析3.分析工具4.性能指标42一些限制•光速–光纤中的光速200000kmps–北京到杭州1120km来回需要10ms•网速–2Mbps(256KBps)下载50KB页面需要195ms•网卡–服务器1000M网卡–虚拟机理论最大QPS=1000/8/3(台)/50KB*1024=85043一些限制•浏览器并发数限制44了解HTTP•请求头–Cache-Control–keep-alive–User-Agent–Cookie–If-Modified-Since•响应头–Expires–Cache-Control–Content-Encoding•状态码45页面请求用户角度46页面请求47页面请求实际情况分析工具•Firefox–Firebug–YSlow–NetExport•Chrome–SpeedTracer–PageSpeed•Fiddler2•HttpWatch•dynaTraceAJAXEdition•WebPagetest/AolPageTest49性能指标•开始渲染时间•Domready•可交互时间•首屏时间•onLoad50线上监测Alibench/CommonJS/NavigationTiming51浏览器端优化52章节内容1.减少请求数2.减小响应大小3.减少DNS查询4.浏览器渲染优化53减少请求数•缓存资源•组合CSS/JS•CSSSprites•必要时再加载–根据用户行为•杜绝404•减少重定向54减小响应大小•减小HTML–页面越小延迟越小–Gzip–HTML瘦身–减小Cookie大小•减小静态资源–最小化CSS/JS–优化图片55HTML瘦身•移除空白•删除属性引号•避免行内样式•为JS变量设置别名–document.getElementById--$•使用相对的URL56使用相对URL57减少域名查询•数量上平衡–多,DNS查询多–少,并发受限制•有些域名不推荐使用–img05~8.taobaocdn.com58浏览器渲染优化•首屏优先–减少Dom数量•按需加载•次要信息异步化–多,请求数多–少,页面大•避免页面缩放图片59淘宝版YSlow嗷嗷60总结1、系统的优化程度,取决于你对它的了解程度2、优化的方法有两种,做得更少或者做得更快61推荐资料•淘宝开源•JavaPerformance•构建高性能Web站点•高性能网站建设指南•高性能网站建设进阶指南•TroubleshootingGuideforJavaSE6withHotSpotVM•JavaSE6HotSpotVirtualMachineGarbageCollectionTuning•StepbyStepGCTuningintheHotSpotJavaVirtualMachine62Q&AQ&A63谢谢!64