http://domark.iteye.com/blog/1924302

 

这段时间觉得很有必要对java的内存分析工具进行熟悉,这样以后出现机器负载较高,或者反应很慢的时候,我就可以查找原因了。上网搜了搜,发现下面这些是比较常用的,然后我在机器上试试了,把结果也贴出来哈。

1.jps 
类似ps -ef|grep java 显示java进程号

或者pgrep java
2.jstack 
打印jvm内存的堆栈信息,打印出来的结果类似 
2010-04-21 20:10:51 
Full thread dump Java HotSpot(TM) Server VM (10.0-b23 mixed mode):

"RMI TCP Connection(idle)" daemon prio=10 tid=0x08f7a000 nid=0x1928 waiting on condition [0x4b234000..0x4b2350a0] 
   java.lang.Thread.State: TIMED_WAITING (parking) 
at sun.misc.Unsafe.park(Native Method) 
- parking to wait for  <0x68ec3430> (a java.util.concurrent.SynchronousQueue$TransferStack) 
at java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:198) 
at java.util.concurrent.SynchronousQueue$TransferStack.awaitFulfill(SynchronousQueue.java:424) 
at java.util.concurrent.SynchronousQueue$TransferStack.transfer(SynchronousQueue.java:323) 
at java.util.concurrent.SynchronousQueue.poll(SynchronousQueue.java:874) 
at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:944) 
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:906) 
at java.lang.Thread.run(Thread.java:619)

"Attach Listener" daemon prio=10 tid=0x08a08800 nid=0x18e4 runnable [0x00000000..0x4b142068] 
   java.lang.Thread.State: RUNNABLE

"recvMsgTP-1_sharereport_groupId_refund_[daily]-33040763-3-thread-10" prio=10 tid=0x08f3d400 nid=0x2985 waiting on condition [0x4b192000..0x4b192fa0] 
   java.lang.Thread.State: WAITING (parking) 
at sun.misc.Unsafe.park(Native Method) 
- parking to wait for  <0x6af53cd8> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject)
at java.util.concurrent.locks.LockSupport.park(LockSupport.java:158) 
at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:1925)
at java.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue.java:358) 
at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:946) 
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:906) 
at java.lang.Thread.run(Thread.java:619)

这样我们可以根据打印结果,看到现在哪些线程在运行,哪些在等待, 进而再找到线程等待执行的原因,从而分析出程序执行变慢的原因。

3.jstat -gcutil 
对java 垃圾回收信息的统计,这样我们可以得到垃圾回收是否正常,full GC的执行时间和频率是否正常等。 
  S0     S1     E      O      P     YGC     YGCT    FGC    FGCT     GCT   
  8.34   0.00  53.24  13.14  51.77     74    7.596    28   25.099   32.695 
  8.34   0.00  53.54  13.14  51.77     74    7.596    28   25.099   32.695 
  8.34   0.00  53.93  13.14  51.77     74    7.596    28   25.099   32.695 
  8.34   0.00  53.93  13.14  51.77     74    7.596    28   25.099   32.695 
  8.34   0.00  53.93  13.14  51.77     74    7.596    28   25.099   32.695 
  8.34   0.00  53.97  13.14  51.77     74    7.596    28   25.099   32.695 
  8.34   0.00  53.98  13.14  51.77     74    7.596    28   25.099   32.695 
  8.34   0.00  53.98  13.14  51.77     74    7.596    28   25.099   32.695 
  8.34   0.00  53.98  13.14  51.77     74    7.596    28   25.099   32.695 
  8.34   0.00  54.01  13.14  51.77     74    7.596    28   25.099   32.695 
  8.34   0.00  54.40  13.14  51.77     74    7.596    28   25.099   32.695

后面加T表示的是Time 执行时间,单位是秒 
YGC  FGC 分别是young GC和Full GC执行的次数。

4.jinfo - flags 
  可以查询java运行的参数设置 
Attaching to process ID 21982, please wait... 
Debugger attached successfully. 
Server compiler detected. 
JVM version is 10.0-b23

-Dprogram.name=run.sh -Xms1024m -Xmx1024m -XX:NewSize=320m -XX:MaxNewSize=320m -XX:PermSize=96m -XX:MaxPermSize=96m -Djava.awt.headless=true -Dsun.net.client.defaultConnectTimeout=10000 -Dsun.net.client.defaultReadTimeout=30000 -Xdebug -Xrunjdwp:transport=dt_socket,address=18787,server=y,suspend=n -Djava.net.preferIPv4Stack=true

5.jmap 
-histo 
打印出java中的对象信息,包括实例个数,字节大小和完整类名。 
num     #instances         #bytes  class name 
---------------------------------------------- 
   1:        660495       66381608  [C 
   2:        134119       34894408  [B 
   3:         73441       30779672  [I 
   4:        670401       16089624  java.lang.String 
   5:        125062       15547312  <constMethodKlass> 
   6:        427296       13673472  java.util.TreeMap$Entry 
   7:        328585       13143400  java.util.concurrent.ConcurrentHashMap$EntryIterator 
   8:        125062       10010904  <methodKlass> 
   9:        132205        8504792  [Ljava.lang.Object; 
  10:        173806        7883528  <symbolKlass>

这些命令后面都要加上java进程号。

java自带的jvm分析工具的更多相关文章

  1. JDK中自带的JVM分析工具

    目录 一.业务背景 二.Jdk-Bin目录 三.命令行工具 1.jps命令 2.jinfo命令 3.jstat命令 4.jstack命令 5.jmap命令 四.可视化工具 1.jconsole 2.v ...

  2. Java虚拟机------JVM分析工具

    主要介绍JVM的分析工具: jps jps:Java Virtual Machine Process Status Tool http://docs.oracle.com/javase/1.5.0/d ...

  3. 转:LoadRunner自带的协议分析工具

    在做性能测试的时候,协议分析是困扰初学者的难题,不过优秀的第三方协议分析工具还是挺多的,如:MiniSniffer .Wireshark .Ominpeek 等:当然他们除了帮你分析协议之外,还提供其 ...

  4. VS2010自带的性能分析工具分析.NET程序的性能

    这篇博文给大家分享的是,如何使用VS自带的性能分析工具来分析我们编写的.NET程序,一边找出程序性能的瓶颈,改善代码的质量.在实际开发中,性能真的很重要,往往决定一个产品的生死~良好的用户体验的基础之 ...

  5. JDK自带的监控分析工具JConsole

    非常多开发人员认为自己懂Java编程.事实是大多数开发人员都仅仅领会到了Java平台的皮毛.所学也仅仅够应付工作. 作者将深度挖掘Java平台的核心功能.揭示一些鲜为人知的事实.帮助您解决最棘手的编程 ...

  6. Java自带的性能监测工具用法简介——jstack、jconsole、jinfo、jmap、jdb、jsta、jvisualvm

    JDK内置工具使用 一.javah命令(C Header and Stub File Generator) 二.jps命令(Java Virtual Machine Process Status To ...

  7. Tomcat优化和JVM分析工具

    Tomcat的常见优化和JVM常见分析工具 Tomcat的常用优化配置 (1) 内存空间: /etc/sysconfig/tomcat JAVA_OPTS="-server -Xms32g ...

  8. JVM分析工具与查看命令

    1.概述 无可避免地,我们都需要用到多线程的一天.单纯地使用多线程的参数设置,比如-Xms.-Xmx.-Xss等,还不足够,我们还要学会如何分析JVM里面的线程状况. 在进行java程序问题定位时,内 ...

  9. JVM 分析工具和查看命令,超详细

    jinfo 可以输出并修改运行时的java 进程的opts. jps 与unix上的ps类似,用来显示本地的java进程,可以查看本地运行着几个java程序,并显示他们的进程号. jstat 一个极强 ...

随机推荐

  1. ARM linux的启动部分源代码简略分析【转】

    转自:http://www.cnblogs.com/armlinux/archive/2011/11/07/2396784.html ARM linux的启动部分源代码简略分析 以友善之臂的mini2 ...

  2. aspxgridview export导出数据,把true显示成‘是’

    项目原因,数据库中的数据是‘true’还有‘false’,但是在页面上要显示为‘是否’,导出来的时候也是要显示成‘是否’ 要在web页面当中显示成‘是否’,只要在gridview的CustomColu ...

  3. [New learn]AutoLayout调查基于IB

    代码:https://github.com/xufeng79x/AutoLayout-IB 1.简介 Autolayout旨在解决不同高宽度的屏幕下的显示问题,通过增加给控件增加约束来达到不同屏幕间的 ...

  4. Redis 集群使用(2)

    Redis包含三种集群策略: 主从复制 哨兵模式 redis cluster 主从复制 在主从复制中,数据分为两类:主数据库(master)和 从数据库(slave).其中主从复制有如下特点: 主数据 ...

  5. linux命令(25):ln命令

    命令格式: ln [参数][源文件或目录][目标文件或目录] 必要参数: -b 删除,覆盖以前建立的链接 -d 允许超级用户制作目录的硬链接 -f 强制执行 -i 交互模式,文件存在则提示用户是否覆盖 ...

  6. opencv 图像转换

    #include <cv.h> #include <highgui.h> int main() { CvPoint2D32f srcTri[], dstTri[]; CvMat ...

  7. BNU - 49102

    进化之地(Evoland) Time Limit: 1000ms Case Time Limit: 1000ms Memory Limit: 65536KB 64-bit integer IO for ...

  8. js 获取html5的data属性

    我以前一直以为只能用jquery的data()来获取 哈哈 是我太弱了 <!DOCTYPE html> <html> <head> <title>dat ...

  9. 《逐梦旅程 WINDOWS游戏编程之从零开始》笔记4——Direct3D编程基础

    第11章 Direct3D编程基础 2D游戏是贴图的艺术,3D游戏是渲染的艺术.这句话在我学过了之前的GDI编程之后,前一句算是有所体会,现在是来理解后一句的时候了. 安装DirectX SDK配置啥 ...

  10. AC日记——「SCOI2016」美味 LiBreOJ 2016

    #2016. 「SCOI2016」美味 思路: 主席树: 代码: #include <bits/stdc++.h> using namespace std; #define maxa 26 ...