之所以写这篇技术文章,是因为这两天发现了一些感觉很牛逼的东西,本着分享的态度,跟大家一起交流一下,如果高手,那么我们多交流,如果是小辈,可以进行深入学习。
记得以前在阿里做研发的时候,需要应对双11的大流量访问,保证付款环节的稳定性,经历过两个迭代的性能优化,当然更多的是进行业务层面的优化,通过缓存,多线程,缩短程序执行路径,增加上下文,服务降级,资源开关,SQL调优等,当时用到过一个工具叫TProfiler,来查看方法耗时的,可以具体到每一个get,set方法的耗时,当然可以通过设置包路径,来过滤不必要的耗时信息,TProfiler是淘宝自研的性能监控工具,源码地址:http://code.taobao.org/p/tprofiler/wiki/index/ ,大家可以查看,整个过程是 在JVM启动时把时间采集程序注入到字节码中,整个过程无需修改应用源码.运行时会把数据写到日志文件,工程师通过查看日志,来断言一些很耗时的方法体,并进行性能优化。
接下来我再来讲一下什么是APM,对于APM,其实之前我也不是很清楚,压根没听说过,也是前两天,晚上再阿里云市场上浏览SAAS中间件的时候,偶然发现的,当时发现有一个中间件,当然好奇之心让我对于他们宣扬的“实时抓取缓慢的程度和SQL语句”必须要一探究竟,于是,我就去官网 https://www.oneapm.com/ 想进行一次试用,中文名叫:蓝海讯通,布署其实非常简单,只需要下载一个文件OneAPM,将这个文件夹放到tomcat根本录,然后修改oneapm.properties文件,将获取到的试用key值填进去就可,这个是必须要填的,要不然人家怎么去管控你,填完之后,使用java -jar oneapm.jar install,将这个jar包安装一下,这个命令主要会去修改你的 catalina.sh文件,增加两行命令,启动的时候,会去将这个jar包装载到jvm里面,原理根TProfiler应当差不多,通过值入字节码去采集日志信息,接下来重启就可以了。 等五分钟,登录到www.oneapm.com点击AI查看即可。 下来我贴几张图,供大家观看
下图就是AI的主页面,差不多5分钟内会将数据上报到oneapm的服务器,我们就可以很清楚的看到每个请求的API的耗时情况
那么我们点击一个事务进去看一下究竟,在后台任务响应时间里面,有很详细的本次请求里,每个方法的执行耗时
那么如果能知道拓扑图,那就更好了,见下图,本次请求,有该问外网,redis, database
光知道拓扑肯定不过瘾,没关系,继续往下看,可以很清晰的知道,请求redis的set,sadd,get,del的调用次数,耗时都有。
本文写到这里,肯定没完,APM缩写是 Application Performance Management & Monitoring,应用程序的性能服务管理和监控,兴奋之余,准备布署到我们集群开始使用,正好性能优化可以用上,问题是云版的SAAS oneapm,每个月一个jvm 999元,作为合格的程序员,本着能开源绝不掏钱的思路,就有了下面的篇幅。
在官网上发现其合作伙伴有美团云
马上让我同学联系了美团云的同学的了解使用情况,得到了其实APM国外很早之前就有公司在做了,有一个叫new relic再做,百度了一下,蝉游记团队也在一年前推荐过,官网:https://newrelic.com 大家可以去注册,下载,布署方式跟oneapm是完全一样的,安装过程我就不一一讲了,挺简单的。
差不多15分钟吧,就整完了,主要还需要VPN,稍慢一点,要不然5分钟都不需要。
环境打通后,记得那个key,一定要修改newrelic.yml 这个文件,key变一下,重启就可以了。
等5分钟进行数据上报吧,刷一下页面有了,My Application就是我的应用
点击My Application,大家其实可以看一下,跟oneapm其实差不多,耗时,事务都有,还有用户满意度apdex score,这个需要自定义一些参数,这样apm就会按照算法给出得分
点击具体的一个方法,进行,看一下详情,在详情面,我们可以看到吞吐量,以及这个API对调用的方法,DB的耗时趋势图,这个就比TProfiler方便多了,TProfiler得人肉看日志
这个是DB和redis的耗时情况,以及占比
那么所有的DB耗时的整体情况趋势也是可以看到的
这个是redis的
JVM层面肯定是少不了的,堆内存,新生代,老年代都是可以查看的
线程池,以及线程数
数据报告
当然,启动参数,以及所有的jar包,以及jar包版本,都是一览无余
这其实也只是APM的一个功能,针对server端进行的监控,还有针对客户端,针对web前端功能都是你想象不到的细粒度。
另外很重要的一点就是,newrelic目前是免费的!!!,工欲善其事,必先利其器,有了这个神器,系统的性能耗时,一个普通的工程师稍加指导其实就可以进行性能优化了,newrelic不单单支持java,php,ruby等等都可以布署使用。
还有很多好玩的一些技术,篇幅有限,等下次再跟大家分享吧。