老张接个新项目,项目可是不小,好多模块。使用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调优的更多相关文章

  1. JVM调优之经验

    在生产系统中,高吞吐和低延迟一直都是JVM调优的最终目标,但这两者恰恰又是相悖的,鱼和熊掌不可兼得,所以在调优之前要清楚舍谁而取谁.一般计算任务和组件服务会偏向高吞吐,而web展示则偏向低延迟才会带来 ...

  2. JVM调优工具锦囊

    Arthas线上 分析诊断调优工具 以前我们要排查线上问题,通常使用的是jdk自带的调优工具和命令.最常见的就是dump线上日志,然后下载到本地,导入到jvisualvm工具中.这样操作有诸多不变,现 ...

  3. jvm系列(四):jvm调优-命令大全(jps jstat jmap jhat jstack jinfo)

    文章同步发布于github博客地址,阅读效果更佳,欢迎品尝 运用jvm自带的命令可以方便的在生产监控和打印堆栈的日志信息帮忙我们来定位问题!虽然jvm调优成熟的工具已经有很多:jconsole.大名鼎 ...

  4. jvm系列(六):jvm调优-从eclipse开始

    jvm调优-从eclipse开始 概述 什么是jvm调优呢?jvm调优就是根据gc日志分析jvm内存分配.回收的情况来调整各区域内存比例或者gc回收的策略:更深一层就是根据dump出来的内存结构和线程 ...

  5. JVM调优总结:调优方法

    JVM调优总结:调优方法 2012-01-10 14:35 和你在一起 和你在一起的博客 字号:T | T 下面文章将讲解JVM的调优工具以及如何去调优等等问题,还有一些异常问题的处理.详细请看下文. ...

  6. [转]JVM调优总结:一些概念

    JVM调优总结:一些概念 原文出处: pengjiaheng 数据类型 Java虚拟机中,数据类型可以分为两类:基本类型和引用类型.基本类型的变量保存原始值,即:他代表的值就是数值本身:而引用类型的变 ...

  7. JVM调优-Java垃圾回收之分代回收

    为什么要进行分代回收? JVM使用分代回收测试,是因为:不同的对象,生命周期是不一样的.因此不同生命周期的对象采用不同的收集方式. 可以提高垃圾回收的效率. Java程序运行过程中,会产生大量的对象, ...

  8. JVM调优浅谈

    1.数据类型 java虚拟机中,数据类型可以分为两类:基本类型和引用类型.基本类型的变量保存原始值,即:它代表的值就是数值本身,而引用类型的变量保存引用值.“引用值”代表了某个对象的引用,而不是对象本 ...

  9. [转] JVM 调优系列 & 高并发Java系列

    1.JVM调优总结(1):一些概念:http://www.importnew.com/18694.html 2.JVM调优总结(2):基本垃圾回收算法:http://www.importnew.com ...

随机推荐

  1. centos7下的/etc/rc.local自启动程序

    在centos6中有一个/etc/rc.local的启动文件,只要把需要经常启动的程序添加到此文件下并执行source /etc/rc.local就可以实现开机启动了. 在centos7中不知道也是如 ...

  2. 【收藏】linux快速查找文件的技巧

    有时候,我们需要在系统中查找文件,Linux有一个非常优秀的搜寻系统. 一般提到搜寻文件的时候,很多人第一反应是find命令,但其实find不是常用的,因为速度慢,而且毁硬盘.一般我们都先用where ...

  3. PHP判断是否有Get参数的方法

    PHP如何判断是否有Get参数,方法很简单,一个函数就可以搞定,需要的朋友可以参考下 if(is_array($_GET)&&count($_GET)>0)//判断是否有Get参 ...

  4. Python3学习笔记37-LeetCode刷题

    LeetCode中国官网一个用来刷编程题的网站,收录了很多面试题.感觉还是学习到很多.记录一下思路.代码还是要多敲. 建议编写完后直接在LeetCode上运行和提交.提交时会有不同的测试用例来测试代码 ...

  5. Python&Selenium 数据驱动【unittest+ddt+json】

    一.摘要 本博文将介绍Python和Selenium做自动化测试的时候,基于unittest框架,借助ddt模块使用json文件作为数据文件作为测试输入,最后生成html测试报告 二.json文件 [ ...

  6. config.json读取和存储

    json格式的配置文件的读取和存储 public class ConfigHelper { public static T GetConfig<T>(string path) { if ( ...

  7. String字符串反转

    new StringBuffer("abcde").reverse().toString(); 通过char数组进行转换 package com.test.reverse; pub ...

  8. bzoj4009: [HNOI2015]接水果(整体二分)

    题目描述 风见幽香非常喜欢玩一个叫做 osu!的游戏,其中她最喜欢玩的模式就是接水果.由于她已经DT FC 了The big black, 她觉得这个游戏太简单了,于是发明了一个更加难的版本. 首先有 ...

  9. 题解 [BZOJ4368][IOI2015]boxes纪念品盒

    题面 解析 可以发现,发纪念品有三种方式: 从左边走再原路返回. 从右边走再原路返回. 走一圈. 注意到,第三种走法最多只会走一次, 因为如果走了多次,那发放的物品数量就会>=\(2k\), 那 ...

  10. Nginx的TCP/UDP调度器

    安装nginx [root@proxy ~]# yum –y install gcc pcre-devel openssl-devel //安装依赖包 [root@proxy ~]# .tar.gz ...