一、背景
每次分析用户访谈的结果,用户对性能总是不满意。软件开发商不遗余力投入资源来提升系统性能,是乎没收到预期的效果。客户想了解整个系统用户的访问情况,而我们只能给出单个功能优化功能前后的效果,达不到用户期望。
二、提升用户性能体验面临的问题
1. 用户使用体验的问题:无法将用户的感知量化、可视化的呈现。缺乏用户行为的记录,用户投诉以后,很难还原问题的现场。
2. 运维人员面临的问题:不能确切知道整个链路出了问题,调整可能涉及到多个部门,现在的监控只是单点的监控,没有确保整个链路的。
3. 开发人员面临的问题:如果排除平台方面的问题,不能准确定位到具体的类、方法、SQL、内存泄露、资源未释放。
现在解决现场的性能问题效率较低,有时候甚至定位不到问题,几个典型的场景:
典型场景1:用户投诉某个功能慢;
实施确认只是单个功能慢,整个系统正常,将IE插件httpwatch测试功能,将结果反馈给开发;
开发确认是前段还是后端的问题,如果是后端,需要实施协调局方取数据库报告;
取回数据库报告后,如果是SQL的问题则改之,如果不是则要找java代码的问题。
整个过程即使是顺利也需要3个小时。
典型场景2:用户反馈整个系统慢;
实施取回weblogic日志和数据库报告;
如果不能在日志中能分析出问题,则需要信息部分管不同领域的专责一同找问题,或是通过不断调整部署结构的方式试出,链路中哪个环节出了问题。
典型场景3:用户反馈系统慢;
实施稍后去验证慢的问题,发现问题已经好了;
实施给开发反馈,开发说场景不能重现,以后再观察。
三、业界的解决方案
公司面临的问题,早在二十年前业界就一直在寻求解决方案,孕育了一种新的软件类型APM(Application Performance Management),应用性能管理软件,APM发展的历史:
第一代APM(1995-2000),以网络为中心
正是第一代互联网浪潮兴起的年代,那个时候,雅虎作为互联网公司的代表,引领一代潮流,美国人忙着铺光纤架网线,一个一个的站点被建立了起来。如果说网站的响应速度决定了用户体验的话,那么当时的网速就决定了网站的响应速度,因此,APM 1.0时代的软件功能就是这么简单:管理网络系统的性能。
第二代APM(2000-2005),以组件为中心
当时市值最高的公司里面是微软,当时的SUN正处于巅峰时期,市值接近 2000亿美元,美国人当时正在疯狂的建设数据中心,购买各种各样的硬件和软件。在这里,我们用一个专业名词来称呼他们,叫做基础组件 (Infrastructure)。那么,当时的APM系统已经到了第二代,作用是监控和管理各种基础组件的性能。
国内的监控宝和深信服也属于这个领域,不同点在于监控宝是Saas,深信服是软件。
第三代APM(2005-至今),以用户体验为中心
随着facebook,twitter这些应用提供商的兴起,越来越多的APP被用来服务全球客户;对于用户来说,他们访问的应用服务可能分布式的部署在全球的多个数据中心上,尤其是10年以后,新的移动访问方式的兴起,让每一个人的生活方式更加紧密的依赖于各种application。在这个时候,应用本身的性能越来越成为制约用户体验提升的瓶颈。这就是第三代APM软件的用武之地:第一是管理真实用户的体验,第二是进行端到端的业务交易性能分析。
在IT界风声水起的电商、社交网络都运用的APM,自己开发的APM都是基于Google 的论文Dapper:
淘宝:自己开发的鹰眼、dynaTrace
eBay:dynaTrace
Twitter:自己开发的Zipkin
四、解决方案
要想解决公司性能提升遇到的困难,要么选用合适的一款APM软件,要么自己开发,曾经开发过Numen,最后以失败告终。选用一款APM软件是不错的选择。
早在2008年就使用APM的软件HP Diagnostics,最终以失败告终。原因是虽然可以定位到请求的时间,只是应用服务器到数据库服务器的时间,还缺失从用户浏览器到应用服务器的时间。安装HP Diagnostics agent后对系统影响较大,在有的地市局是要求卸载的。
在2014年3月使用深信服APM,有所进步,可以定位到客户端到应用服务器的性能,但发出来的请求开发人员还是不知道是哪段java代码或是哪段SQL有问题,还需要手工定位。
使用DT可以实现请求全路径的跟踪,可以将一个请求涉及到的类,SQL语句绑定在一起。IE浏览器到应用服务器的性能也可以监控,原理是在IE注入js来监控,可以监控到类的具体方法性能,具体是那条SQL产生的问题,我认为它是终极解决方案。
五、使用dynatrace大致步骤
在DT的官方网站上注册,他们会发相应的使用地址给你,下载软件和liencese
客户端agent要安装在应用发布的机器上,weblogic里面要设置agent的环境变量,放在JAVA_OPTIONS里面,如下:
-agentpath:/bea11/dt/dynatrace-6.1.0/agent/lib64/libdtagent.so=name=8022_6005_Monitoring,server=10.10.40.118:9998
/bea11/dt/dynatrace-6.1.0/agent/lib64/ agent的安装目录
8022_6005 服务端配置的监听名称
10.10.40.118 服务端IP
export MEM_ARGS="-Xms1024m -Xmx1024m -XX:PermSize=512m -XX:MaxPermSize=512m"
export JAVA_OPTIONS="${JAVA_OPTIONS} -agentpath:/opt/dynatrace-6.3/agent/lib64/libdtagent.so=name=OracleWebLogic_Monitoring,server=10.10.31.132:9998"
10.10.31.132是server的IP地址