如何跟踪可能重叠的应用程序的不同组件中的不同性能改进?

时间:2012-08-01 00:09:55

标签: java java-ee profiling performance

所以这是一个普遍的问题。这就是问题所在:

我目前正和另外5个人一起开展一个项目。我们在应用程序(Java EE)中分配了不同的性能调优项目。但是,我们都需要报告与原始组件相比,我们实现了多少改进。现在,如果我们在不同时间检查我们的代码,我们如何在给定时间内跟踪我们自己的个人绩效改进?

我想也许在我们的代码中放置标记并跟踪我的所有代码更改,但我觉得这样太乱了,因为例如让我们说改进就像利用原始数据类型而不是像整数对象一样,但这种改进可能会转移到其他人的工作上。

感谢。 :)

1 个答案:

答案 0 :(得分:3)

对于任何性能改进(无论是更好的速度还是更低的ram),您都应该设置一个测试平台。如果您不能使用单元测试,如果它是Web应用程序,请尝试编写JMeter测试计划。

运行测试,总是使用相同的参数(相同的JVM,以相同的最大堆启动,测试中相同数量的线程等等。)

在未优化的应用程序上运行它,并使用一些工具派生一些基准数据(jdk中有很多,jvisualvm很简单,但需要人工交互,jmap可以自动化)。

假设它使用500Mb ram和10分钟来完成未优化版本的测试计划。

运行这些测试,每个开发人员都可以测试他所做的修改是否使情况更好,不改变任何东西,甚至使其更糟糕,然后再在源版本中进行检查。

由于您签入代码,您知道谁签入了哪些修改,您可以(使用git,svn或任何其他现代源版本控制系统)签出特定版本。

针对各种版本运行测试,您可以看到您是否正在进行降低ram消耗,时间或任何指标的任务......以及作为副作用的人也为其贡献了哪些数字。

你甚至可以使用Hudson,Jenkins等持续集成工具自动完成它。指示它检查,编译,部署,运行测试,收集数据,发送邮件,其中包含谁提交了什么以及如何更改数字,但是有一台超级计算机告诉谁好人......对团队士气不是最好的。