近来发现关闭IDEA后重新打开,CPU使用率都特别高,甚至我没有打开任何project都会占用300%的CPU,且等几十分钟也没有降下去的意思。因为经过很长一段时间后也能降到50%~70%的CPU使用,所以也没有太注意,今天决心要解决这个问题。

最开始我以为是因为改动了VM参数导致的。IDEA默认的VM参数为:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
-Xms128m
-Xmx750m
-XX:ReservedCodeCacheSize=240m
-XX:+UseCompressedOops
-Dfile.encoding=UTF-8
-XX:+UseConcMarkSweepGC
-XX:SoftRefLRUPolicyMSPerMB=50
-ea
-Dsun.io.useCanonCaches=false
-Djava.net.preferIPv4Stack=true
-Djdk.http.auth.tunneling.disabledSchemes=""
-XX:+HeapDumpOnOutOfMemoryError
-XX:-OmitStackTraceInFastThrow
-Xverify:none

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

但还原为默认参数问题仍然存在。于是我备份了所有的设置,然后把设置恢复成了原始设置,问题便解决了,看来是我某项设置导致的。最后经过排除,是HTTP Proxy的设置导致的。

Preferences > Appearance & Behavior > System Settings > HTTP Proxy中,我使用了Auto-detect proxy settings并配置了Automatic proxy configuration URL,使用No Proxy后问题解决。

在解决这个问题期间我还将IDEA CPU的snapshot提交到了https://youtrack.jetbrains.com,后来经他们确认这是IDEA 2018.3.2的一个bug,2018.3.1也有同样的问题,这个bug将在2018.3.4版本中修复

这里也分享一下IDEA获取内存或CPU的snapshot的方式。

  1. 在VM参数中增加-agentlib:yjpagent=delay=10000,probe_disable=*
  2. 重启IDEA后再工具栏会出现2个按钮,分别是Start CPU Usage ProfilingCapture Memory Snapshot,可以分别用来获取CPU使用和内存使用的snapshot。
  3. 生成的zip文件可以通过https://uploads.services.jetbrains.com/上传,或者直接以附件的形式在https://youtrack.jetbrains.com贴出来。