JVM 问题排查常用工具

一、 jmap

// 打印jvm的堆状况,主要是年轻代和老年代信息
jmap -heap <pid>
如:
Heap Configuration:
   MinHeapFreeRatio = 40
   MaxHeapFreeRatio = 70
   MaxHeapSize      = 536870912 (512.0MB)
   NewSize          = 1310720 (1.25MB)
   MaxNewSize       = 17592186044415 MB
   OldSize          = 5439488 (5.1875MB)
   NewRatio         = 2
   SurvivorRatio    = 8
   PermSize         = 21757952 (20.75MB)
   MaxPermSize      = 268435456 (256.0MB)
   G1HeapRegionSize = 0 (0.0MB)

Heap Usage:
PS Young Generation
Eden Space:
   capacity = 46661632 (44.5MB)
   used     = 1139464 (1.0866775512695312MB)
   free     = 45522168 (43.41332244873047MB)
   2.441972025324789% used
From Space:
   capacity = 524288 (0.5MB)
   used     = 0 (0.0MB)
   free     = 524288 (0.5MB)
   0.0% used
To Space:
   capacity = 1048576 (1.0MB)
   used     = 0 (0.0MB)
   free     = 1048576 (1.0MB)
   0.0% used
PS Old Generation
   capacity = 112721920 (107.5MB)
   used     = 54152304 (51.64366149902344MB)
   free     = 58569616 (55.85633850097656MB)
   48.04061534792878% used
PS Perm Generation
   capacity = 94371840 (90.0MB)
   used     = 94050296 (89.69335174560547MB)
   free     = 321544 (0.30664825439453125MB)
   99.65927971733942% used

37542 interned Strings occupying 3976528 bytes.

以上的输出很简单,第四行起开始输出此进程的JAVA使用的环境
Heap Configuration:指java应用启动时设置的JVM参数。像最大使用内存大小,年老代,年青代,持久代大小等。

Heap Usage:当时的heap实际使用情况。包括新生代、老生代和持久代。

其中新生代包括:Eden区的大小、已使用大小、空闲大小及使用率。Survive区的From和To同样。

有这个可以很简单的查看本进程的内存使用情况。

可以用于分析堆内存分区大小是否合理,新生代和老生代的大小分配是否合适等。

也许进程占用的总内存比较多,但我们在这里可以看到真正用到的并没有多少,很多都是"Free"。内存使用的堆积大多在老年代,内存池露始于此,所以要格外关心“Old Generation”。

查看整个JVM内存状态 
jmap -heap [pid]
要注意的是在使用CMS GC 情况下,jmap -heap的执行有可能会导致JAVA 进程挂起

查看JVM堆中对象详细占用情况
jmap -histo [pid]

导出整个JVM 中内存信息
jmap -dump:format=b,file=文件名 [pid]

二、 jhat

jhat是sun 1.6及以上版本中自带的一个用于分析JVM 堆DUMP 文件的工具,基于此工具可分析JVM HEAP 中对象的内存占用情况
jhat -J-Xmx1024M [file]
执行后等待console 中输入start HTTP server on port 7000 即可使用浏览器访问 IP:7000

kill -3 [pid]
在Linux 上找到Java所在的进程号,然后执行以上命令,线程的相关信息就输出到console

三、 jstack

jstack 是sun JDK 自带的工具,通过该工具可以看到JVM 中线程的运行状况,包括锁等待,线程是否在运行
执行 jstack [pid] ,线程的所有堆栈信息

"http-8080-10" daemon prio=10 tid=x0a949bb60 nid=0x884  waiting for monitor entry [...]

"http-8080-10" 这个线程处于等待状态。 waiting for monitor entry 如果在连续几次输出线程堆栈信息都存在于同一个或多个线程上时,则说明系统中有锁竞争激烈,死锁,或锁饿死的想象。

“http-8080-11” daemon prio=10 tix=xxx nid=xxx in object.wait() [...]
 java.lang.Thread.State:waiting (on object monitor)
该表示http-8080-11的线程处于对象的Wait 上,等待其他线程的唤醒,这也是线程池的常见用法。

“Low Memory Detector”daemon prio=10 tix=xx nid=xxx runnable [...] java.lang.Thread.State:runnable

表示“Low Memory Detector” 的线程处于Runable状态,等待获取CPU的使用权.

四、 Java VisualVM

对于使用命令行远程监控jvm 太麻烦 。 在jdk1.6 中 Oracle 提供了一个新的可视化的。 JVM 监控工具 Java VisualVM 。jvisualvm.exe 在JDK 的 bin 目录下。

双击启动 Java VisualVM 后可以看到窗口左侧 “应用程序 ”栏中有“ 本地 ”、“远程 ” 、“快照 ”三个项目。

“本地 ”下显示的是在 localhost 运行的 Java 程序的资源占用情况,如果本地有 Java 程序在运行的话启动 Java VisualVM 即可看到相应的程序名,点击程序名打开相应的资源监控菜单,以图形的形式列出程序所占用的 CPU 、 Heap 、 PermGen 、类、线程的 统计信息。

“远程” 项下列出的远程主机上的 Java 程序的资源占用情况,但需要在远程主机上运行 jstatd 守护程序

五、 eclipse Memory Analyzer

Eclipse 提供的一个用于分析JVM 堆Dump文件的插件。借助这个插件可查看对象的内存占用状况,引用关系,分析内存泄露等。

http://www.eclipse.org/mat/

时间: 2024-10-10 22:04:18

JVM 问题排查常用工具的相关文章

服务器问题排查常用命令

1.top 查看系统负载情况,load average CPU使用情况,按1查看每个CPU的使用情况 shift+h  查看每个线程的情况 2.free -m   按兆为单位输出内存的已用,未用,总共等结果 total       used       free     shared    buffers     cached Mem:         32176      27911       4265          0        132       7114 -/+ buffers

2015第30周三Spring常用工具类

文件资源操作 文件资源的操作是应用程序中常见的功能,如当上传一个文件后将其保存在特定目录下,从指定地址加载一个配置文件等等.我们一般使用 JDK 的 I/O 处理类完成这些操作,但对于一般的应用程序来说,JDK 的这些操作类所提供的方法过于底层,直接使用它们进行文件操作不但程序编写复杂而且容易产生错误.相比于 JDK 的 File,Spring 的 Resource 接口(资源概念的描述接口)抽象层面更高且涵盖面更广,Spring 提供了许多方便易用的资源操作工具类,它们大大降低资源操作的复杂度

配置JVM内存 查看内存工具

一.配置JVM内存 1.配置JVM内存的参数有四个: -XmxJavaHeap最大值,默认值为物理内存的1/4,最佳设值应该视物理内存大小及计算机内其他内存开销而定: -XmsJavaHeap初始值,Server端JVM最好将-Xms和-Xmx设为相同值,开发测试机JVM可以保留默认值: -XmnJavaHeapYoung区大小,不熟悉最好保留默认值: -Xss每个线程的Stack大小,不熟悉最好保留默认值: 2.如何配置JVM内存分配: (1)当在命令提示符下启动并使用JVM时(只对当前运行的

java 常用工具

System:类中的属性方法都是静态的.无法实例化 err:"标准"错误输出流 in:"标准"输入流 out:"标准"输出流 常见方法: long currentTimeMillis();获取当前时间的毫秒值 Properties    getProperties(); 获取系统属性 Properties集合中存储的都是String类型的键和值. Runtime:没有构造方法摘要,说明该类不可以创建对象. 方法又是非静态,说明该类提供静态返回该类

开发常用工具 屏幕取色软件 取色软件

开发常用工具 屏幕取色软件 韩梦飞沙  韩亚飞  [email protected]  yue31313  han_meng_fei_sha 取色软件_屏幕取色软件_取色软件大全

写python的常用工具及设置

目的:记录一下常用工具及设置,以便换电脑后可以找回工作环境. 环境:windows 7  ubuntu 16.4 情景:学习python时,一个好的开发环境可以提供很多帮助,节省时间,提高效率等,经常在windows和ubuntu系统中写python,想要一个兼容平台且好用免费的软件---pycharm不错的选择. 之前ubuntu上我用过Spyder,很轻巧,但是自动补齐功能不方便,只能当作小工具了,然后找到了pycharm,它支持ubuntu和windows,社区版是免费的,已经足够了,自动

mysql 性能优化常用工具

mysql 性能优化常用工具: 常用性能检测工具 show engine innodb  status show full processlist information_schema.processlist explain create table innodb_table_monitor(a int) engine=innodb; innodb_locks innodb_lock_wait innodb_trx zabbix监控 pt-tools 工具 性能优化的两种方式: 1.执行计划的解

Android 常用工具类之SPUtil,可以修改默认sp文件的路径

参考: 1. 利用Java反射机制改变SharedPreferences存储路径    Singleton1900 2. Android快速开发系列 10个常用工具类 Hongyang import android.app.Activity; import android.content.Context; import android.content.ContextWrapper; import android.content.SharedPreferences; import java.io.

自然语言处理常用工具

nlp 常用工具  转自 http://www.cppblog.com/baby-fly/archive/2010/10/08/129003.html *NLP Toolbox  CLT http://complingone.georgetown.edu/~linguist/compling.html  GATE http://gate.ac.uk/  Natural Language Toolkit(NLTK) http://nltk.org  MALLET http://mallet.cs.