侧边栏壁纸
博主头像
孔子说JAVA博主等级

成功只是一只沦落在鸡窝里的鹰,成功永远属于自信且有毅力的人!

  • 累计撰写 377 篇文章
  • 累计创建 136 个标签
  • 累计收到 12 条评论

目 录CONTENT

文章目录

通过 IDEA 自带的监控功能解决内存和CPU资源占比大的问题

孔子说JAVA
2022-12-14 / 0 评论 / 0 点赞 / 98 阅读 / 2,113 字 / 正在检测是否收录...

在使用idea时有时发现idea内存消耗比较严重,尤其开启了tomcat后,过一段时间,idea的运行内存会被吃满,甚至在编辑代码提交代码时,CPU占比可以直接飙升到100%,风扇呼呼作响,内存消耗严重和CPU资源占比大这些问题可以利用Idea自带的监控功能进行解决。

1、IDEA的活动监视器

IDEA的活动监视器可以查看 IDEA 中各项活动的CPU占比情况(查看IDEA的CPU消耗),通过 Help -> Diagnostic Tools -> Activity Monitor… 菜单可以打开IDEA的活动监视器(有些版本的IDEA路径是Help -> Activity Monitor…)。

  • 也可以双击Shift,在弹出对话框中输入Activity Monitor,点击搜索到的Activity Monitor选项即可查看IDEA的活动监视器。

image-1669796565375

打开IDEA的活动监视器,它可以监视当前我们项目的CPU情况(IDEA的CPU消耗)。如下图:

image-1669796723114

在活动监视器页面,我们可以看到各项活动所占CPU资源的情况,由高到底排列。

2、问题排查

内存消耗严重和CPU资源占比大时,利用IDEA的活动监视器进行排查。

image-1669797131534

如上图,可以看到我的IDEA中占用内存最大的是 JIT,其他的就是插件问题。

3、问题解决

3.1 JIT占用过大问题

解决JIT占用过大的问题,我们也可以通过配置jvm的配置文件来配置,通过 Help -> Edit Custom VM Options… 菜单进入:

image-1669798460908

具体如下:

image-1669797444285

具体参数配置:

#堆栈设置
-Xms4096m
-Xmx4096m
-Xmn3072m
-XX:MetaspaceSize=1024m
-XX:MaxMetaspaceSize=1024m
-XX:+AlwaysPreTouch
-XX:InitialCodeCacheSize=1200m
-XX:ReservedCodeCacheSize=1200m
-XX:+UseCompressedOops
-Dfile.encoding=UTF-8

# 采用何种垃圾回收参数
-XX:+UseConcMarkSweepGC
-XX:ParallelGCThreads=4
-XX:SoftRefLRUPolicyMSPerMB=50
-ea
# JIT 参数
-XX:CICompilerCount=2
-XX:TieredStopAtLevel=1
-XX:MaxInlineLevel=3
-XX:Tier4MinInvocationThreshold=100000
-XX:Tier4InvocationThreshold=110000
-XX:Tier4CompileThreshold=120000

-Dsun.io.useCanonPrefixCache=false
-Djava.net.preferIPv4Stack=true
-Djdk.http.auth.tunneling.disabledSchemes=""
-XX:+HeapDumpOnOutOfMemoryError
-XX:-OmitStackTraceInFastThrow
-Djdk.attach.allowAttachSelf
-Xverify:none

-XX:ErrorFile=$USER_HOME/java_error_in_idea_%p.log
-XX:HeapDumpPath=$USER_HOME/java_error_in_idea.hprof

配置后重新启动idea。其实大部分情况下,不是垃圾回收造成的cpu负载过高,而是由于JIT Compiler 即时编译将class文件编译成本地机器代码占用了大量的cpu资源导致的卡顿。

配置文件中这部分是控制 JIT compiler。

-XX:CICompilerCount=2
-XX:TieredStopAtLevel=1
-XX:MaxInlineLevel=3
-XX:Tier4MinInvocationThreshold=100000
-XX:Tier4InvocationThreshold=110000
-XX:Tier4CompileThreshold=120000

3.2 插件问题

IDEA的活动监视器中占用CPU过高的插件,我们直接把它删掉即可(可以停用或卸载)。另外我们也可以卸载那些多余不常用的插件。

  • 如果没有找到那个真正消耗资源的元凶插件,优化效果基本无效。在很长的时间中,我也怀疑是某个插件消耗了CPU,最后通过IDEA的活动监视器,发现CPU打满的时候,插件Alibaba 的代码规范检查插件占有CPU最高,于是禁用再去测试,发现后面的代码编辑和提交CPU都保持正常的水平了。

3.3 其他优化设置

调整idea的设置

另外我们还可以设置某些idea配置,比如去掉某些动画、编译检查什么的;这个方案只能减轻运行压力,大部分情况下没什么太大的效果。

调整idea的运行内存

还可以调整 idea.vm.properties 中的jvm大小。此方案没有解决本质问题,只能暂时解决,而且撑下去的时间不会太长,举例来说,我曾经设置了6g的内存,但还是很快就会被吃掉。

0

评论区