目前正在做XX系统的冗余代码清理,系统瘦身,过程中整理的一些方法见下:
代码清理流程图:
其中几个关键的步骤:
1. TCC采集线上代码覆盖数据作为样本
先用TCC 对线上的xx应用的war包代码进行插装,然后部署插装后的代码到线上;运行一段时间(1-2周),采集到线上应用的真实的代码覆盖数据。
2. 用埋点中心对样本数据进行二次确认
然后对TCC采集的代码覆盖数据作为样本数据,进行分析:可以先确定class覆盖数据为0的文件。对这些文件应用埋点中心进行埋点统计。
关于埋点中心的详细用法及介绍见淘宝百科:埋点中心。
关于为什么要用埋点中心对TCC的统计的样本数据进行二次确认?相信通过对比两个工具,就会知道答案了。
两个工具的对比:
所以,结合两个工具:TCC进行初步的样本筛选,然后用埋点中心进行精确的线上所有机器、不限时间的埋点统计确认,就会得到非常准确的class或method覆盖数据了。
本次xx系统的数据统计,其中TCC 统计的未被调用的类文件是:202个,通过埋点中心再次确认:未被调用的的java文件有170个
,反复确认后,进一步精确缩小了代码覆盖数据的范围。
经过线上代码覆盖率的数据采集,并进行了分析,开始进行refund的代码清理。
3. 埋点中心用法示例
代码中加入埋点中心的功能非常的简单:引入jar包,编写配置文件,用日志的方式记录统计数据。
引入埋点中心的client. jar包:
编写埋点配置文件:
在应用源代码中定义埋点对象:
及要统计的method 或者line进行埋点,和log4j的使用类似:
埋点修改好后,就可以和日常一起发布上线了。
4. 云梯数据分析
在你部署项目之后埋点中心会启动一个定时程序,定期地将数据日志传送出去。此时你将收到埋点中心的通知邮件,上面会详细地讲解你接下来要做的事情。其中包含任务所对应的云梯表名(以givenchy_开头),接下来你就可以登录云分析或Gateway,像普通数据表一样使用Hive对任务数据进行分析。当前同步云梯的周期是1个小时,也就是说记录日志的1个小时后你就可以在云梯查到相应的数据了。
登陆云梯,
http://*****.****.alibaba-inc.com:****/index.htm
新建、或找到自己的个人项目:
运行job,格式查看hive sql 的格式:
select max(log_time), package, class
,method
from givenchy_90e1b1d876594536d456ce9c4324bafd
where log_time>'2012-03-26 00:00:00'
group by package, class, method
图示:
获取代码清理的埋点数据。
可以把数据下载到本地,进行分析。
接下来就是删除TCC和埋点中心统计到的没有被调用到的代码了。
5. 代码清理策略:
在清理的过程中发现无用的代码有以下几种模式:
说明:
1. 对于独立的class文件:
ClassA的代码覆盖数据为0,分析代码发现ClassA完全独立,或者被ClassB调用,但是ClassB的覆盖数据也为0,且没有被其他类依赖。
这些类的特点是:独立,或没有被其他的Class依赖。
2. 有依赖关系的class文件
文件A,被类B的方法B1调用,B1可能被类C的方法C1调用,甚至C1可能被类D调用。
3. 从业务角度考虑,已经不再使用的代码。
top的PageApi的调用部分代码,涉及到*.tp.*的代码,这部分调用量很少,埋点中心上去5天后,才有这部分的访问日志。而且已经通知对应的业务方升级到tradeapi,所以这部分代码在推动业务方调用方式升级后,即可去掉。
期待可以给目前正在做系统瘦身,冗余代码清理的tx带来帮助~! |