码迷,mamicode.com
首页 > 其他好文 > 详细

一次神奇的JVM调优

时间:2019-10-11 00:26:39      阅读:113      评论:0      收藏:0      [点我收藏+]

标签:ima   天都   ase   var   pid   tor   name   一模一样   相关   

老张接个新项目,项目可是不小,好多模块。使用Intellij import new project, 结果卡在writing class中,而且mac的风扇一直转,像是要变成直升机起飞。

等啊等,intellij给出提示increase heap size,得,加大,400增到800,内存大任性。老张心想,这咋这么慢,项目大也不至于吧。。

你猜怎么着,肯定是不好啊,要是真么简单,也不会有这篇blog了。

intellij又提示了几次increase heap size,从800到1600,从1600到2400,老张的希望一次次破灭,也明白了问题不是出在这,那问题在哪呢?

首先因为project是公司产品项目,所以排除项目问题。又因为异常是卡writing class,所以从JVM入手。

老张熟悉的打开terminal,输入:jps, 找到PID 1234. 再输入:jvisualvm,打开调优工具。查看1234的内存使用情况。

俗话说,不看不知道,一看吓一跳,CPU使用曲线一直在80%以上,而垃圾回收就更酷了。曲线如下图

技术图片

 

老张忘了截图,但是这张心率失常的心电图和堆回收情况简直一模一样,动不动回收100%, 这应该是死锁吧?

好吧,dump 堆看log。

log里一堆这玩意:

Locked ownable synchronizers:
- <0x00000007b6774790> (a java.util.concurrent.ThreadPoolExecutor$Worker)

很多线程被lock了,为什么呢?老张心想,我明明把内存设置这么大,咋还这么多死锁的?

google一下,原来内存设置越大可能导致性能越低,这咋回事?

实际上,本地内存是有限的,分配给jvm的越多,本地OS cache的能力就越小,cache越小,就要有更多东西从磁盘读取,会导致系统越来越慢。

哦哦,原来是这样啊。老张赶紧重新设置内存-Xmx 200m -Xms 200m.

不对!性能差和我死锁有什么关系???

不得已,老张使出杀招:find ./ -name *.iml|xargs rm -rf   find ./ -name *.idea|xargs rm -rf 把项目中的intellij相关配置全部删除,重启intellij,重新导入,成了,问题解决。。。。

因为项目模块太多,导入时顺序不对,造成了死锁,intellij全锅。。

问题终于解决了,老张祝大家今天都没有环境问题~~~

--也许是个标题党

--让学习充满乐趣

一次神奇的JVM调优

标签:ima   天都   ase   var   pid   tor   name   一模一样   相关   

原文地址:https://www.cnblogs.com/lizhang4/p/11651364.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!