java - 检测并查明性能回归

标签 java performance jvm regression

是否有任何已知技术(以及与之相关的资源,例如研究论文或博客文章)描述如何动态地以编程方式检测导致性能下降的代码部分,以及如果可能的话,在 JVM 或其他虚拟机环境上(可以相对容易地应用诸如检测等技术)?

特别是,当项目拥有大型代码库和大量提交者(例如操作系统、语言或某些框架)时,有时很难找出导致性能下降的更改。诸如this one之类的论文在描述如何检测性能回归(例如在某个代码片段中)方面走了很长一段路,但没有描述如何动态查找项目中的代码片段被一些提交改变并导致性能下降。

我认为这可以通过检测程序的各个部分来检测导致性能回归的确切方法来完成,或者至少缩小性能回归的可能原因的范围。

有谁知道有关此的任何文章,或者任何使用此类性能回归检测技术的项目?

编辑:

我指的是these lines中的一些东西,但对代码库本身进行进一步分析。

最佳答案

也许不完全是您所要求的,但在我从事的一个具有极端性能要求的项目中,我们使用单元测试框架编写了性能测试,并将它们粘合到我们的持续集成环境中。

这意味着每次 checkin 时,我们的 CI 服务器都会运行测试,以验证我们的功能速度没有超出我们可接受的范围。

它并不完美 - 但它确实使我们能够随着时间的推移密切关注我们的关键性能统计数据,并且它捕获了影响性能的 checkin 。

定义性能的“可接受的边界”与其说是一门科学,不如说是一门艺术 - 在我们的 CI 驱动测试中,我们基于硬件规范采用了相当简单的方法;如果性能测试超过 100 个并发用户的响应时间超过 1 秒,我们的构建就会失败。这解决了一系列简单的性能问题,并给了我们对“生产”硬件的相当大的信心。

我们明确地在 checkin 之前没有运行这些测试,因为这会减慢开发周期 - 迫使开发人员在 checkin 之前运行相当长时间的测试,这会鼓励他们不要过于频繁地 checkin 。我们也没有信心在不部署到已知硬件的情况下能够获得有意义的结果。

关于java - 检测并查明性能回归,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7639799/

相关文章:

java - 如何将带有 LIKE 的 IN 参数与 RowSet 一起放置?

java - 与 Scala/Akka Actor 相比,Java 线程有多重?

java - 如何禁用窗口中的 F10 默认操作(显示窗口菜单)?

asp.net - asp.net mvc 和 web 表单之间有性能差异吗?

c++ - std::bind 与 lambda 的效率

Java 性能 : Search and removal speed on removeAll()

Java 图像连接组件

Java 程序在执行时挂起,而之前没有挂起

java - JVM实现接口(interface)和纯抽象类的区别?

java - 从另一个 JVM 加载 JVM 中现有的类对象