【问题标题】:Tips for Handling large projects with Maven and IntelliJ IDEA使用 Maven 和 IntelliJ IDEA 处理大型项目的技巧
【发布时间】:2013-06-07 09:37:20
【问题描述】:

我正在阅读 this 博客文章,其中介绍了一个团队使用 Intellij Idea 进行大型 maven 项目的经验,并且还查看了大约 2 年前针对 IDEA v 发布的 similar 问题。 10.0.2.

前文中提到的一个技巧非常有意义:
将C:\Users\$user\.IntelliJIdea12 移动到一个未被防病毒软件访问扫描的文件夹中。

我搜索了以性能为中心的 VM 选项,目前我的 idea64.exe.vmoptions 看起来像这样:

-Xms1200m
-Xmx1200m
-XX:MaxPermSize=200m
-ea
-server
-XX:+DoEscapeAnalysis
-XX:+UseCompressedOops
-XX:+UnlockExperimentalVMOptions
-XX:+UseParallelGC
-XX:ReservedCodeCacheSize=64m
-XX:+UseCodeCacheFlushing
-Dsun.io.useCanonCaches=false

问题

  1. 您还有其他类似的技巧来提高大型/大型 maven 项目的 Intellij IDEA(12.1.3、64 位)性能吗?

  2. 您能否分享一下您在idea64.exe.vmoptions 和/或idea.properties 中的IDEA 配置中所做的w.r.t VM 选项的发现。

  3. 我曾尝试使用 JDK 7 来启动 IDEA,但这似乎并不会以某种方式严重影响它的性能。如果您尝试过这样做,您是否有同样的经历?

【问题讨论】:

  • 您有任何具体的性能问题吗?究竟什么是慢?建议使用 follow this document 和 report issues with CPU snapshots attached to YouTrack 而不是调整 JVM 选项。建议调整的唯一选项是堆大小(仅在您经常遇到 GC 或 OOM 错误的情况下)。
  • 我有一个大型 maven 项目,导致 IDEA 经常挂起或反应迟缓。我的系统有 8GB 的​​ RAM 和一个 25/120GB 空闲空间的 SSD。
  • 你说的大是什么意思?你能给我们一些指标吗?类数、文件数、模块数、工件数等?
  • 我目前正在做一个项目,它有几百个模块,大约三十个左右的 webapps,它使用大约一千个支持 jar,加起来一个 500MB 的编译和压缩可分发。你的意思是比那个更大吗?我设置了一个 2gb 堆,这是我真正需要玩的唯一东西。当然,我使用的是带有大 SSD 的顶级 MacBook Poo 来保存文件和 16GB 内存,但仍然......
  • @EngineerDollery 感谢分享指标。我正在处理的项目有大约 230 个子模块,编译+压缩后的大小约为 100 MB。 8K+ 班数; 400k+ LOC。

标签: performance maven configuration ide intellij-idea


【解决方案1】:

按照@CrazyCoder 的建议,我按照官方常见问题解答中关于此事的步骤进行操作:

Common solutions for IntellJ IDEA performance problems

具体来说,以下内容似乎产生了明显的影响:

  1. 将 c:/Users/$user/.IntelliJIdea12 移动到 McAfee 的按访问扫描程序排除的位置,并更新 $INTELLJ_INSTALL_FOLDER/bin/idea.properties 以指向新位置,如下所示(其中 c:/dev 是 McAfee 排除的文件夹):

    idea.config.path=c:/dev/.IntelliJIdea12/config
    idea.system.path=c:/dev/.IntelliJIdea12/system
    idea.plugins.path=c:/dev/.IntelliJIdea12/config/plugins
    idea.log.path=c:/dev/.IntelliJIdea12/system/log

  2. 在$INTELLJ_INSTALL_FOLDER/bin/idea.properties 中设置idea.jars.nocopy=true,如this 博文中所述。

  3. 恢复到股票$INTELLIJ_INSTALL_FOLDER/bin/idea64.exe.vmoptions。剩下的唯一更改是Too low heap size 中针对 64 位 JVM 建议的更改。这是我目前在该文件中的内容:

    -Xms1200m
    -Xmx1200m
    -XX:+UseCompressedOops
    -XX:MaxPermSize=350m
    -XX:ReservedCodeCacheSize=96m
    -XX:+UseCodeCacheFlushing
    -ea
    -Dsun.io.useCanonCaches=false
    -Djava.net.preferIPv4Stack=true

  4. 禁用 Git 集成插件,因为我主要使用命令行 Cygwin-Git。

  5. 监视.IntelliJIdea12/idea.log 很有用。 例如:我在尝试打开项目中的 zip 文件时看到它经常记录错误后,我禁用了 osmorc(用于 OSGI)插件。示例错误:

    警告 - pi.vfs.impl.jar.JarHandlerBase - 打开 zip 文件时出错: C:\dev\a-maven-project\pom.xml java.util.zip.ZipException: 错误 打开 zip 文件 在 java.util.zip.ZipFile.open(本机方法)
    在 java.util.zip.ZipFile.(ZipFile.java:127)
    在 java.util.zip.ZipFile.(ZipFile.java:143)

  6. 禁用所有我不需要的插件。当前禁用的插件列表是:

    禁用插件:ASP (0.1)、Android Designer、Android Support (10.0)、 用于 IntelliJ IDE (3.0.9, SVN:1212171008) 的 Atlassian 连接器,基础 Cucumber (1.0), BashSupport (1.1beta16), CFML Support (3.53), CheckStyle-IDEA (4.2)、ClearCase 集成 (2.0)、Cloud Foundry 集成 (1.0)、CloudBees 集成 (1.0)、指挥官 (1.0.0)、 复制为 HTML (0.8.1)、Cucumber for Groovy (1.0)、Cucumber for Java (1.0)、数据库导航器 (3.0.2501)、描述键 (0.3)、Drools 支持 (1.0)、Eclipse 集成 (3.0)、Flash/Flex 支持 (1.0)、 GWT 支持 (1.0)、Geronimo 集成 (1.0)、Git 集成 (8.1)、 GitHub、Google App Engine 集成 (1.1.4)、Grep 控制台 (1.1)、 GuiceyIDEA (8.0), HAML, IDEtalk (1.0), IdeaVim (0.28), 标识符 荧光笔 (3.62)、IntelliJad Plus (0.5.6)、JBoss 集成 (1.0)、 JBoss jBPM (2.0.0), JRebel Plugin (2.0.2), JavaFX (1.0), Key 启动器 (1.0.11), Log4JPlugin (1.02), Markdown (0.8.3), Osmorc (1.4.3), Perforce 集成 (2.0)、PluginUpdateNotifier (2.0.3)、RemoteTail (0.3.4)、Resin 集成 (8.1)、Ruby (5.4.0.20130410)、SQL 查询 插件 (2.2)、SSH 远程运行 (0.1)、Seam 页面流支持 (1.0)、Seam 页面支持 (1.0)、Seam 支持 (1.0)、SmarterEditor (0.8.3)、Struts 导航器插件 (1.3.4)、Subversion 集成 (1.1)、TFS 集成 (999.999)、Tapestry 支持 (1.0)、TestNG-J (8.0)、UI 设计师、UI 设计师(核心)、Vaadin 支持(1.0)、Visual SourceSafe 集成 (2.0)、WebLogic 集成 (1.0)、WebSphere 集成 (1.0), ZKM-Unscramble (1.0), dmServer 支持 (0.9.5), hg4idea (10.0), soapUI 插件 (3.5)

【讨论】:

    【解决方案2】:

    IntelliJ IDEA 2017.2 Added really nice feature,在处理大型项目时有很大帮助。基本上,您可以标记 IDEA 将加载哪些模块,哪些不加载。 IDE 不会以任何方式触及已卸载的模块。它们不会被索引、搜索,也不会在检查时进行重构。加载/卸载模块可以在加载/卸载模块对话框中快速配置。可以使用打开对话框

    项目树窗口→右键单击文件→加载/卸载模块...

    暂时减少 IDEA 使用的模块数量将大大提高大型项目的性能。您可以在我写的博客文章中找到有关此功能和 IntelliJ IDEA 其他性能调整的更多信息: IntelliJ IDEA Tips & Tricks: Improving performance

    【讨论】:

    • 好。但是如果其他模块是依赖的,那么它也需要加载它们。
    【解决方案3】:

    有时您可能会在大型项目中耗尽内存。然后大型 maven 项目的导入过程失败。
    因此,如果您的项目的任何模块都带有红线下划线,并且您会看到

    Exception java.lang.OutOfMemoryError: GC overhead limit exceeded
    

    在它上面,转到“设置 -> 构建工具 -> Maven -> 导入”,并在那里找到“导入器的虚拟机选项”选项。增加限制,将其设置为-Xmx1g(或更多)。

    (Source)

    【讨论】:

      猜你喜欢
      • 2011-08-03
      • 2017-07-21
      • 2016-02-07
      • 1970-01-01
      • 2018-06-10
      • 2015-12-27
      • 2015-07-08
      • 2021-12-22
      • 2016-11-01
      相关资源
      最近更新 更多