Mac怎样检察 IDEA 的日志文件

[复制链接]
发表于 2025-10-17 18:11:29 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
 启动一个超大内存项目报错:
Error:java: Compilation failed: internal java compiler error
Error:Module 'xk-order-core' production: java.lang.OutOfMemoryError: Java heap space
Error:java: java.lang.OutOfMemoryError: Java heap space
Error:Module 'xk-order-core' production: java.lang.OutOfMemoryError: GC overhead limit exceeded
常用伎俩三连:

1.项目未精确编译
缘故因由:项目大概未精确编译,导致 XkOrderApplication 类文件未天生。
办理方法:
在 IDEA 中,点击 Build > Rebuild Project,确保项目完全重新编译。
查抄编译输出目次(如 target/classes 或 build/classes),确认 XkOrderApplication.class 文件是否存在。
2.依赖辩论或缺失
缘故因由:某些依赖大概未精确加载,导致主类无法加载。
办理方法:
如果项目使用 Maven 或 Gradle,运行以下下令查抄依赖是否精确加载:
Maven:mvn dependency:tree
Gradle:gradle dependencies
确保全部依赖都已精确下载并包罗在 classpath 中。
3.清算缓存并重启
缘故因由:IDEA 的缓存大概破坏,导致设置错误,导致类路径或编译信息未精确更新。
办理方法:
清算 IDEA 缓存:
点击 File > Invalidate Caches / Restart...
选择 Invalidate and Restart。

在 macOS 上,IntelliJ IDEA 的日志日志文件通常存储在用户目次下的 .IntelliJIdea<版本号> 文件夹中。以下是检察日志日志文件的详细步调:
1. 找到日志日志文件的位置

日志文件通常位于以下路径:
~/Library/Logs/IntelliJIdea<版本号>
此中 <版本号> 是你当前使用的 IntelliJ IDEA 的版本号,比方 IntelliJIdea2023.3。
2. 打开日志文件夹

你可以通过以下几种方式快速定位日志文件夹:
方法 1:使用 Finder


  •         打开 Finder。
  •         按下 Command + Shift + G,打开“前往文件夹”对话框。
  •         输入以下路径:
            ~/Library/Logs/IntelliJIdea<版本号>        大概
            ~/Library/Logs/JetBrains/IntelliJIdea<版本号>
           
            更换 <版本号> 为你的实际版本号。
  •         点击“前往”,即可打开日志文件夹。
方法 2:使用终端


  •         打开终端(Terminal)。
  •         输入以下下令并按回车:
            bash复制
    1. open ~/Library/Logs/IntelliJIdea<版本号>
    复制代码
    更换 <版本号> 为你的实际版本号。这将直接在 Finder 中打开日志文件夹。
3. 检察日志文件

日志文件夹中通常包罗多个日志文件,重要关注以下文件:

  •         idea.log:这是 IDEA 的主日志文件,记录了大部门运行时信息和错误。
  •         <模块名>.log:如果某些插件或模块有独立的日志,也会存储在这里。
你可以使用文本编辑器(如 TextEdit、VS Code 或其他代码编辑器)打开这些日志文件,检察详细的错误信息。
4. 搜刮特定错误

如果你知道详细的错误信息(如“Failed to retrieve application JMX service URL”),可以在日志文件中搜刮干系关键词,快速定位标题。
使用终端搜刮日志

你也可以通过终端下令快速搜刮日志文件中的内容。比方:
  1. grep -i "Failed to retrieve application JMX service URL" ~/Library/Logs/IntelliJIdea<版本号>/idea.log
复制代码
这将资助你快速找到与该错误干系的内容。

干系几个内存设置和编译器设置
1. 增长 JVM 堆内存
缘故因由:默认的堆内存大概不敷以支持项目运行,导致频仍的垃圾接纳。
办理方法:
在 IntelliJ IDEA 中,进入 File > Settings > Build, Execution, Deployment > Compiler,增长编译器使用的堆内存。
【Mac当地设置】
 File > Settings > Build, Execution, Deployment > Compiler
Build process heap size(Mybytes) :2028       【本次启动失败的重要缘故因由,原先是700】
Shared build process VM option : -Xss4m       【此处默认没有设置】
IDEA2020

IDEA2023

增长JVM堆内存(编译器历程)

作用:提拔编译时的内存上限,制止因大型项目编译时内存不敷导致的频仍垃圾接纳(GC)或编译失败。

2.查抄 Maven 或 Gradle 设置
缘故因由:Maven 或 Gradle 的 JVM 堆内存设置过低。
办理方法:
对于 Maven,进入 Settings > Maven > Importing,增长 VM options for importer 的堆内存设置(如 -Xmx3072m)。
对于 Gradle,可以在 gradle.properties 文件中增长以下设置:
org.gradle.jvmargs=-Xmx2048m
【Mac当地设置】
 Settings > Maven > Importing
VM options for importer : -Xmx3072m
JDK for Importer :  1.8

调解Maven/Gradle导入内存

作用:办理项目依赖分析或模子加载时的内存溢出标题(常见于大型多模块项目)。
设置方式:

  •         Maven:
            Settings > Build, Execution, Deployment > Build Tools > Maven > Importing > VM options for importer
            示例:-Xmx3072m
  •         Gradle:
            修改项目根目次的 gradle.properties:
            org.gradle.jvmargs=-Xmx4g -XX:MaxMetaspaceSize=1g
雷同设置:

  •         全局Maven设置:在情况变量中设置 MAVEN_OPTS=-Xmx3g
  •         Gradle保卫历程:通过 gradle.properties 设置 org.gradle.daemon=true 提拔复用服从

3. 调解 IntelliJ IDEA 的 JVM 堆内存
如果你是通过 IntelliJ IDEA 运行 Maven,可以增长 IDE 的 JVM 堆内存:
打开 Help > Edit Custom VM Options
【Mac当地设置】
VM Options文件:
-Xms512m
-Xmx8192m

调解IDEA自身JVM堆内存

作用:防止IDE卡顿或无相应(尤其在处置惩罚大型项目或长时间运行时)。
设置位置:
Help > Edit Custom VM Options
参数示例:
  1. -Xms512m   # 初始堆内存
  2. -Xmx8192m  # 最大堆内存(建议为物理内存的1/4)
  3. -XX:ReservedCodeCacheSize=512m  # 代码缓存(提升索引速度)
复制代码
雷同设置:

  •         内存指示器:启用 Settings > Appearance & Behavior > Appearance > Show memory indicator 及时监控监控内存使用
  •         调解GC战略:添加 -XX:+UseG1GC 优化垃圾接纳服从

4.对于运行的项目,可以在运行设置中(Run/Debug Configurations)的 VM options 中添加以下参数:
-Xms512m -Xmx1024m -XX:MaxPermSize=512m
根据项目需求调解这些参数。
【Mac当地设置】
-Dspring.cloud.zookeeper.discovery.register=false -Xms2048m -Xmx4072m

调解项目运行的VM参数

作用:为详细应用运行时分配富足内存,制止OOM(如Spring Boot微服务)。
设置位置:
Run/Debug Configurations > Configuration > VM options
参数示例:
  1. -Dspring.profiles.active=dev
  2. -Xms2g -Xmx4g
  3. -XX:MaxMetaspaceSize=1g  # Java 8+使用Metaspace替代PermGen
复制代码
雷同设置:

  •         情况变量:在Shell中启动时指定 JAVA_OPTS="-Xmx4g"
  •         容器化摆设:在Dockerfile中设置 JAVA_TOOL_OPTIONS="-Xmx2g"

通用发起


  •         监控监控工具:使用JConsole或VisualVM分析内存使用,制止盲目调大参数。
  •         版本适配:

    •                 Java 8及之前:-XX:MaxPermSize 控制永世代
    •                 Java 8+:使用 -XX:MaxMetaspaceSize(默认无上限)
           
  •         均衡分配:制止将堆内存设为物理内存的50%以上,留给体系和其他历程资源。
通过公道设置这些参数,可显着提拔IDEA的相应速率和项目构建/运行稳固性。

JDK和SDK标题

提问1:在 IntelliJ IDEA 中,进入 File > Project Structure > Poject Setting >Moudules 
对应Moudule 每个都有对应的Moudule SDK 这个SDK指的是?
File > Project Structure > Platform Settings >SDKs
这里的SDK是做啥的

  •         Module SDK(模块级SDK):
            在 File > Project Structure > Modules 中,每个模块可以独立设置自己的 SDK(如 JDK、Android SDK 等)。

    •                 这表现该模块在编译、运行时会使用此 SDK 版本。
    •                 比方:模块A使用 JDK 11,模块B使用 JDK 17(实用于多模块项目中差异模块须要差异版本的情况)。
           
  •         SDKs设置(全局SDK管理):
            在 File > Project Structure > Platform Settings > SDKs 中,这里管理全部可用的 SDK 实例(如 JDK、Groovy SDK 等)。

    •                 这是全局设置,用于添加、删除或修改 SDK 的路径和版本。
    •                 模块中设置的 "Module SDK" 必须从这里的列表中选择。
           

提问2:Settings > Maven > Importing
JDK for Importer :  1.8
这个JDK指的是?
Maven Importer 的 JDK:
在 Settings > Maven > Importing 中,"JDK for Importer" 指定了 Maven 在导入依赖、分析 POM 文件时使用的 JDK 版本。

  •         这个 JDK 大概与项目自己的 JDK 差异,它是独立设置的。
  •         比方:项目使用 JDK 17,但 Maven Importer 大概设置为 JDK 8(某些旧插件大概须要低版本 JDK)。

提问3:
在 IntelliJ IDEA 中,进入 File > Settings > Build, Execution, Deployment > Compiler > Java Cpmplier ,
Per-moudle bytecode version
Target bytecode version 这个设置是指啥?
Target bytecode version(目的字节码版本):
在 File > Settings > Build, Execution, Deployment > Compiler > Java Compiler 中,"Target bytecode version" 决定了编译后的 .class 文件的字节码版本。

  •         它对应 javac 的 -target 参数,确保天生的字节码兼容指定版本的 JVM。
  •         比方:纵然使用 JDK 17 编译,若目的字节码设为 8,天生的 .class 文件可在 JRE 8+ 上运行(但代码不能使用 JDK 9+ 的新语法)。
总结对比:

设置位置作用示例场景Module SDK模块使用的详细 SDK 版本(编译、运行)多模块项目中差异模块使用差异 JDK 版本SDKs设置管理全部可用的 SDK(全局)添加 JDK 11、JDK 17 或 Android SDKMaven Importer 的 JDK控制 Maven 导入依赖时使用的 JDK办理旧版 Maven 插件须要低版本 JDK 的标题Target bytecode version控制天生的字节码版本(兼容性)用 JDK 17 天生兼容 JRE 8 的字节码

两个设置区别
设置1:File > Settings > Build, Execution, Deployment > Compiler Build process heap size(Mybytes) :2028     
设置2:File > Settings > Build, Execution, Deployment > Compiler > Java Compiler Additional command line parameters :-Xss4m 这两个设置的区别是?
1. Build > Rebuild Project 的作用


  •         欺压完全重新编译:

    •                 清算全部已编译的 .class 文件(删除旧的编译效果)。
    •                 重新编译项目中全部源代码(包罗依赖项和天生的代码,如 Lombok 天生的代码)。
    •                 确保全部代码基于最新的修改和设置重新天生。
           
  •         实用场景:

    •                 当出现编译错误但代码看似精确时(如缓存导致的旧编译效果残留)。
    •                 修改了编译器参数(如 -Xss4m)或构创建置后,须要重新触发完备编译。
    •                 依赖代码天生工具(Lombok、注解处置惩罚器)未精确天生代码时。
           
  •         与平凡编译的区别:

    •                 平凡编译(Build > Build Project):仅编译修改过的文件,依赖缓存加快。
    •                 Rebuild:无视缓存,重新开始编译全部内容,更彻底但耗时更长。
           

2. 查抄编译输出目次的作用


  •         目的:确认编译效果是否天生预期文件(如 XkOrderApplication.class)。
  •         输出目次路径:

    •                 Maven 项目:target/classes
    •                 Gradle 项目:build/classes/java/main
    •                 自界说路径:可在 Settings > Build, Execution, Deployment > Compiler > Build output path 中检察。
           
  •         查抄内容:

    •                 文件是否存在:

      •                         如果 XkOrderApplication.class 不存在,阐明编译失败或未处置惩罚该类(如 Lombok 未天生代码)。
                     
    •                 文件更新时间:

      •                         确认文件时间戳与近来编译时间同等,制止缓存标题。
                     
    •                 依赖代码天生工具的效果:

      •                         对于 Lombok 天生的代码(如 @Data、@Builder),需查抄干系类是否天生精确(如 XkOrderApplication$XkOrderApplicationBuilder.class)。
                     
           

3. 完备操纵流程的意义

通过以下步调形成闭环验证:

  •         Rebuild Project → 确保全部代码基于最新设置重新编译。
  •         查抄输出目次 → 验证编译效果是否符合预期。
  •         定位标题:

    •                 如果编译乐成但类文件缺失 → 大概是代码天生工具(如 Lombok)设置标题。
    •                 如果编译失败 → 根据错误日志(如 StackOverflowError)调解编译参数(如增大 -Xss)。
           

4. 常见标题与办理

标题 1:Rebuild 后仍无 .class 文件


  •         大概缘故因由:

    •                 编译器参数未收效(如 -Xss4m 未精确设置)。
    •                 Lombok 插件未安装或版本不兼容。
    •                 代码存在语法错误或依赖缺失。
           
  •         办理步调:

    •                 查抄 Build 输出窗口的完备错误日志。
    •                 确认 Lombok 插件已启用(Settings > Plugins)。
    •                 清算项目并手动删除输出目次,再实行 Rebuild。
           
标题 2:类文件存在但步调活动非常


  •         大概缘故因由:

    •                 编译天生的代码与实际代码差异等(如 Lombok 天生错误)。
    •                 依赖辩论或缓存未清算。
           
  •         办理步调:

    •                 对比源代码和反编译的 .class 文件(使用 javap -c 或 IDEA 的 View > Show Bytecode)。
    •                 实行 mvn clean install 或 gradle clean build 从下令行验证。
           

总结

操纵作用关键查抄点Rebuild Project欺压全量编译,扫除旧效果确保设置和代码修改收效查抄输出目次验证编译效果是否完备天生确认 .class 文件存在且最新通过这两步操纵,可以快速定位编译标题的根源(如设置未收效、代码天生失败),从而高效办理标题。

回复

使用道具 举报

登录后关闭弹窗

登录参与点评抽奖  加入IT实名职场社区
去登录
快速回复 返回顶部 返回列表