`
windyrails
  • 浏览: 3270 次
  • 性别: Icon_minigender_1
  • 来自: 长沙
文章分类
社区版块
存档分类
最新评论

jvm调优--查找最耗CPU的代码

 
阅读更多
1.场景
今天在公司用mvn编译的时候,出现机器卡死的情况,让我深深的反省了一下。


[java] view plaincopyprint?
01.../apache-maven-3.0.5/bin/mvn  -Dhadoop.version=0.20.2-cdh3u5 -DskipTests clean package 
../apache-maven-3.0.5/bin/mvn  -Dhadoop.version=0.20.2-cdh3u5 -DskipTests clean package


这样的编译会出现问题,编译不下去,因为maven需要设置一下jvm参数才行。


[java] view plaincopyprint?
01.export MAVEN_OPTS="-Xmx1g -XX:MaxPermSize=512M -XX:ReservedCodeCacheSize=512m"  
export MAVEN_OPTS="-Xmx1g -XX:MaxPermSize=512M -XX:ReservedCodeCacheSize=512m"
-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。


[java] view plaincopyprint?
01.top 
top



第二步,查看一下9764这个进程的子进程。


[java] view plaincopyprint?
01.top -p 9764 -H 
top -p 9764 -H
发现pid为9791的子进程(我理解为线程)最耗费资源,当然还有一个9924(略)。






第三步,将这个pid转换为16进制,结果为263f


[java] view plaincopyprint?
01.printf "%x\n" 9791 
printf "%x\n" 9791[java] view plaincopyprint?
01.263f 
263f
第四步,用jstack打印出父进程的栈,从而找到pid为263f的这个线程的栈信息。


[java] view plaincopyprint?
01.jstack 9764 | grep 263f -A 30 
jstack 9764 | grep 263f -A 30








可以看出:

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调优学习-optimizeJVM.zip

    "jvm调优学习-optimizeJVM.zip" 文件可能包含了一系列关于JVM调优的学习资料,特别是"optimizeJVM-develop"这个子文件可能涵盖了开发阶段的JVM优化实践。 1. **JVM架构** - 类加载器:负责加载类文件,包括启动类...

    jvm 调优笔记-jvm.zip

    《JVM调优笔记》 Java虚拟机(JVM)是Java编程语言的核心组成部分,它负责执行字节码,管理内存,以及优化程序性能。JVM调优是提高Java应用程序性能的关键步骤,涉及到多个方面,包括堆内存设置、垃圾收集器选择、...

    jvm原理机器调优-jvm.zip

    三、JVM调优 1. **堆内存设置**:`-Xms` 和 `-Xmx` 分别设定初始堆大小和最大堆大小,避免频繁调整大小导致的性能影响。 2. **新生代和老年代比例**:`-XX:NewRatio` 设定新生代与老年代的比值。 3. **垃圾收集器...

    JVM调优视频理论及工具

    【JVM调优视频理论及工具】主要涵盖了Java虚拟机(JVM)的优化实践与相关的分析工具。在Java开发中,JVM调优是提升应用程序性能的关键环节,尤其是在高并发、大数据处理等场景下,良好的JVM配置能显著提高系统效率。...

    JVM调优world总结

    JVM调优是一个综合的过程,涉及CPU、内存、异常处理、数据库访问等多个方面。通过理解JVM工作原理,使用合适的工具进行监控和分析,结合代码优化,可以有效提升程序性能。 9. **参考文献**: - 学习更多关于JVM、...

    JVM性能调优经典教程

    6. **监控与诊断工具**:JDK自带的JConsole、VisualVM、JProfiler等工具可以帮助我们实时监控JVM状态,分析CPU、内存、线程等问题,找出性能瓶颈。 7. **JVM内存泄漏检测**:学习如何识别和处理内存泄漏问题,了解...

    jvm工具、参数调优&调试技巧

    ### JVM工具、参数调优与调试技巧 #### 一、JVM工具 ##### 1. jps:虚拟机进程状况工具 - **简介**:`jps` 是一个用于显示当前运行的所有Java虚拟机进程(JVMs)的简单工具。它会列出每个JVM的PID(进程ID)以及...

    JVM调优工具Jprofiler内存泄漏定位的简单分析(附源码)(二)

    总之,JProfiler作为一款强大的JVM调优工具,其内存分析功能对于查找和修复内存泄漏问题有着显著的效果。通过实际操作"heaptEST"源码,开发者可以更好地理解和掌握内存泄漏的诊断技巧,从而提升应用的性能表现。

    理论与实践结合 解密JVM-day04.rar

    6. **JVM参数调优**:为了适应不同的应用场景,JVM提供了大量的启动参数供调整,如-Xms、-Xmx设置堆大小,-XX:NewRatio控制新生代和老年代的比例,-XX:+UseConcMarkSweepGC选择垃圾回收器等。熟练掌握这些参数的含义...

    jvm-test-demo:jvm学习测试代码

    4. **JVM调优** - **JVM参数设置**:通过-Xms、-Xmx设定堆内存大小,-XX:NewRatio调整新生代与老年代的比例,-XX:+UseConcMarkSweepGC选择垃圾收集器等。 - **性能监控工具**:如JConsole、VisualVM等,用于实时...

    Java虚拟机内存测试和参数调优代码.zip

    本资源"Java虚拟机内存测试和参数调优代码.zip"显然是一个专注于Java开发者如何理解和优化JVM内存配置的实践教程。在Java应用开发中,理解和调优JVM内存设置至关重要,因为它直接影响程序性能、稳定性以及内存使用...

    jvm工具、参数调优&调试技巧.doc

    4. **jhat(Java Heap Analysis Tool)**:当JVM生成堆转储文件后,jhat可以用来分析内存使用情况,查找内存泄漏和对象引用问题。 5. **jmap(Memory Map for Java)**:它可以导出堆内存快照,供其他工具如jhat或...

    WEBLOGIC调优方案

    10. **JVM调优**: - 调整JVM的垃圾回收策略,如设置新生代和老年代的大小,选择合适的垃圾回收器等。 - 开启JMX(Java Management Extensions)以远程监控JVM和WebLogic服务器。 以上调优策略只是基础,实际调优...

    JVM—java虚拟机.pptx

    - **JVM调优**:主要包括堆大小设置、新生代与老年代的比例、GC策略选择等。通过调整这些参数可以优化应用程序的性能,减少内存溢出和垃圾收集的开销。 - **实用工具**:如JConsole、VisualVM、JProfiler等可以...

    实战JAVA虚拟机 JVM故障诊断与性能优化.pdf

    6. **JVM调优实战** - 分析系统负载,确定优化目标。 - 使用各种监控工具进行性能瓶颈定位。 - 逐步调整JVM参数,验证优化效果,进行A/B测试。 - 结合业务场景,持续优化代码结构和算法。 通过学习这本书,...

    WebLogic Server性能调优

    - 分析应用代码的性能,查找可能导致性能下降的瓶颈,如数据库查询效率低下、过度使用同步操作等。 - 使用WebLogic Server的内置诊断工具,如JMX(Java Management Extensions)和日志分析,来定位和解决问题。 5...

    java jvm及性能优化_javajvm优化_Java性能分析_

    1. CPU分析:检查是否有热点方法,通过CPU剖析定位问题代码。 2. 内存分析:关注内存泄露,查看对象生命周期和存活情况。 3. 线程分析:查找死锁、线程阻塞等问题,分析线程 dump 文件。 4. I/O与网络:检查磁盘和...

    eclipse性能优化 <深度理解jvm>读书笔记

    6. **JVM调优**:通过JMX(Java Management Extensions)和JConsole等工具,我们可以监控JVM运行状态,调整JVM参数,如-Xms、-Xmx、-XX:NewRatio等,以提升应用性能。 总结,Eclipse性能优化和JVM的理解是Java...

    JVM相关的常见面试问题汇总.pdf

    - **Hotspot虚拟机**: 最流行的JVM之一。 - **GraalVM**: 支持多种语言的高性能JVM。 - **IBM公司**: - **J9虚拟机**: IBM自家的JVM,广泛应用于IBM的产品中。 - **Azul Systems公司**: - **Zing**: 高性能的JVM...

Global site tag (gtag.js) - Google Analytics