【问题标题】:How can I speed up Sonar's package design analysis?如何加快 Sonar 的包装设计分析速度?
【发布时间】:2011-03-27 00:40:12
【问题描述】:

我维护一个大型(> 500,000 LOC)Java 项目的构建过程。我刚刚在每晚构建的末尾添加了一个声纳分析步骤。但是执行需要三个多小时......这不是一个严重的问题(它在一夜之间发生),但我想知道我是否可以加快它的速度(以便我可以在工作时间手动运行它,如果需要的话)。

我可以调整任何可能改善情况的 Sonar、Hudson、Maven 或 JDK 选项?

[INFO]  -------------  Analyzing Monolith
[INFO]  Selected quality profile : Sonar way, language=java
[INFO]  Configure maven plugins...
[INFO]  Sensor SquidSensor...
[INFO]  Java AST scan...
[INFO]  Java AST scan done: 103189 ms
[INFO]  Java bytecode scan...
... (snip)
[INFO]  Java bytecode scan done: 19159 ms
[INFO]  Squid extraction...
[INFO]  Package design analysis...
... (over three hour wait here)
[INFO]  Package design analysis done: 12000771 ms
[INFO]  Squid extraction done: 12277075 ms
[INFO]  Sensor SquidSensor done: 12404793 ms

1200 万毫秒 = 200 分钟。那是很长一段时间!相比之下,声纳步骤之前的编译和测试步骤不到 10 分钟。据我所知,该过程受 CPU 限制;更大的堆没有影响。也许由于缠结/重复分析而必须这样,我不知道。当然,我知道拆分项目是最好的选择!但这需要相当多的工作;如果我能同时调整一些配置,那就太好了。

有什么想法吗?

【问题讨论】:

  • 如果我得到一个好的解决方案,我会确保它被发布在这里以及 Sonar wiki 中
  • Zac 你很幸运!!...我刚刚在项目中设置了 Sonar...20 小时后,包装设计分析仍在进行中!!!话虽如此,我们大约有 150 万个 LOC :(

标签: java maven-2 performance hudson-plugins sonarqube


【解决方案1】:

我站在你的立场上:在一个超过 200 万个 loc 的项目上(确实应该在几年前拆分成子项目),我从来没有见过在计算的 4 天内完成包设计分析......

截至SONAR-2164 (Add an option to skip the quadratic "Package design analysis" phase),我已经提交了一个补丁,允许用户在他们的 maven 项目文件中设置为 true,从而跳过包设计分析。 此补丁正在等待批准,目前计划包含在 v2.7 中。

【讨论】:

    【解决方案2】:

    来自 Freddy Mallet 的名单:

    "...问题不是来自数据库,而是来自识别所有要剪切的包依赖项的算法。...如果您设法将这个项目剪切成几个模块,那么您的问题就会消失。 "

    我通过排除一个相对较大的包来测试这个理论,果然它急剧下降。从理论上讲,连接数可能会随着包的数量呈二次方增长,因此这种方法可能与如此大的代码库一样好。

    【讨论】:

    • 谁能提供一些关于什么是“相对大”的包的输入?换句话说,您在什么时候看到了性能提升?即从 10,000 个班级到 1,000 个班级,或者可能从 1,000 个班级到 100 个班级?我将明确假设一个包的计数包括它的所有子包。
    • @Tony,是的,它是包的子树。恐怕我记不起具体的细节了。我的猜测是它只代表了几个包(超过 500 个),但可能占类总数的 5-10%(超过 5000 个)。但我的观点是,如果你有 5 倍以上的组件,那么分析依赖关系的运行时间可能会长 25 倍。如果您想切下一块,那么为了获得最佳效果,越大越好(最多一半)。我应该提一下,当它出现时切换到 2.4 也将运行时间减少了 50% 以上。
    猜你喜欢
    • 1970-01-01
    • 2013-04-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-16
    • 1970-01-01
    • 2015-03-15
    • 2016-06-01
    相关资源
    最近更新 更多