jvm调优--查找最耗CPU的代码
来源:互联网 发布:杭州周边旅游知乎 编辑:程序博客网 时间:2024/06/06 01:04
jvm调优--查找最耗CPU的代码
1.场景
今天在公司用mvn编译的时候,出现机器卡死的情况,让我深深的反省了一下。
这样的编译会出现问题,编译不下去,因为maven需要设置一下jvm参数才行。
-Xmx1g -> JVM最大允许分配的堆内存,按需分配
-XX:MaxPermSize -> JVM永久带的最大内存,按需分配
-XX:ReservedCodeCacheSize -> 编译器的代码缓存大小
这样一般都会执行下去,但是当机器负载很高的情况下执行这个的话,会出现机器卡死。
2.引子
咨询了下同事,自己查了查资料总结了下,是因为maven本身启动的也是一个jvm程序,像gradle一样,这样的构建都是启动jvm来调用原生的Java编译器来进行编译。
maven本身也需要内存来下载依赖,启动自己的插件,来fork进程执行其它的操作。
了解了原因,以后编译大型项目的时候,要先查看下机器的负载,不然很容易会done掉。
3.查找最耗CPU的代码
其实这个查找最耗CPU的代码本不该放在这里,貌似和和上面的场景无关,但是我还是想写在这里,权且当个笔记吧。
我在ubuntu12.04上启动了一个itellij ideal 这个IDE,它也启动了一个jvm。
首先,查看一下系统的负载情况,这里可以看到PID为9764的消耗的CPU和MEM最多,command是java,其实就是我的intellij。
第二步,查看一下9764这个进程的子进程。
发现pid为9791的子进程(我理解为线程)最耗费资源,当然还有一个9924(略)。
第三步,将这个pid转换为16进制,结果为263f
第四步,用jstack打印出父进程的栈,从而找到pid为263f的这个线程的栈信息。
可以看出:
1. java的线程池运行任务比较耗费资源。
2. 事件轮询和派发比较耗费资源。
总结:
1. 以后用maven编译要充分考虑机器的负载,和maven编译的目标所需要的资源情况。
2. 排查最耗费系统资源的java代码:
2.1 找出top中最耗费系统资源的PID
2.2找出这个PID的子进程最耗费资源的PID
2.3将PID转换为16进制
2.4用jstack pid | grep 子PID十六进制 -A 30 来找出这个片段。
原创,转载请注明出处http://blog.csdn.net/oopsoom/article/details/23917699
- jvm调优--查找最耗CPU的代码
- jvm调优--查找最耗CPU的代码
- jvm调优--查找最耗CPU的代码
- jstack分析最耗CPU的代码
- JVM六:查找最最耗cpu的线程或线程时间最长并定位代码
- JVM调优之jstack找出最耗cpu的线程并定位代码分析
- JVM调优之jstack找出最耗cpu的线程并定位代码
- JVM调优之jstack找出最耗cpu的线程并定位代码
- JVM调优之jstack找出最耗cpu的线程并定位代码
- JVM调优之jstack找出最耗cpu的线程并定位代码
- JVM调优之jstack找出最耗cpu的线程并定位代码
- JVM调优之jstack找出最耗cpu的线程并定位代码
- JVM调优之jstack找出最耗cpu的线程并定位代码
- JVM调优定位最耗cpu的线程
- 如何分析最耗CPU的线程
- 找到最耗CPU的java线程
- 找到最耗CPU的java线程
- Java虚拟机中查找最耗CPU性能的线程方法
- 运算符除法 “/” 和 "//"的区别
- Android设计模式-备忘录模式
- jsp中重定向、请求分派中的绝对路径与相对路径!
- singletask 不 singletask
- java获取项目的路径
- jvm调优--查找最耗CPU的代码
- 进制之间的转换规则
- Cornerstone Mac 安装
- Maven入门指南⑤:使用Nexus搭建Maven私服
- Install ncurses (ncurses-devel) and try again
- C++中虚函数、纯虚函数、普通函数,三者的区别
- 机器学习中距离和相似性度量分类体系
- JS-this小解析(1)
- mysql之left join、right join、inner join的区别