Java内存泄露监控工具:JVM监控工具介绍及分析

jstack--如果java程序崩溃生成core文件,jstack工具可以用来获得core文件的java stack和native stack的信息,从而轻松地知道java程序是如何崩溃和在程序何处发生问题。

jmap--jmap可以从core文件或进程中获得内存的具体匹配情况,包括Heap size, Perm size等等,目前只有在Solaris和Linux的JDK版本里面才有。

本文将对JVM监控工具jstack, jconsole, jinfo, jmap, jdb, jstat进行详细的介绍,具体内容请看下文。
jstack用于打印出给定的java进程ID或core file或远程调试服务的Java堆栈信息,如果是在64位机器上,需要指定选项"-J-d64",Windows的jstack使用方式只支持以下的这种方式。
jmap命令:打印出某个java进程(使用pid)内存内的,所有‘对象’的情况(如:产生那些对象,及其数量)。
在我们常用的Jstack, Jmap 用于分析java虚拟机的状态的工具,通过起另一个虚拟机通过运行sun.tools包下的java文件,去跟踪另一个虚拟机的状态。
当java虚拟机启动的时候,会启动很多内部的线程,这些线程主要在thread.cpp里的create_vm方法体里实现。而在thread.cpp里主要起了2个线程来处理信号相关的。详细请看下文。
在前面的博客中所提到的信号转发线程,Attach Listener 线程都只是操作socket文件,并没有去执行比如stack 分析,或者heap的分析,真正的工作线程其实是vm thread.
safe point 顾明思意,就是安全点,当需要jvm做一些操作的时候,需要把当前正在运行的线程进入一个安全点的状态(也可以说停止状态),这样才能做一些安全的操作,比如线程的dump,堆栈的信息。
当使用jmap,jstack是用-F参数的时候,是通过调用系统调用ptrace来取的寄存器的信息,在jdk6u23版本之前你会发现,当你使用jstack -F的时候 经常在logger 里面 看到错误信息,直接抛出异常,根本无法看到堆栈信息。
通常我们使用jmap,jstack 去检查堆栈信息的时候,是不会使用-f参数的,但有的时候系统在无法打印出堆栈信息的时候,会建议你使用参数-F。
    近日美国专利局对甲骨文数项Java版权声明的否决让甲骨文和谷歌的专利战争的未来蒙上了不利的阴影。但对于广大开发人员来说这确实一个巨大利好。
    今天,我们宣布了Java FX 1.2和Java FX 1.3将要达到寿命末期,于2012年12月20日结束。更具体地说,Oracle服务器将不再提供对这些版本的Java FX运行时的访问。
    Java是一种杰出的产业开发语言,这是因为它带来了伟大的统一和对事实上以前并不存在的重要标准的关注。但是和所有语言一样,Java将来也会褪色。
    根据原定计划,JDK 6 和Java SE 6 将在今年7月份终结,现在该日期已经被推迟到了11月份。甲骨文称,之所以推迟,是为了给予开发者更多的时间来过渡到JDK 7。
    “Java已死”已经成为一个著名的口水战,挑起这场议论的人希望能有一种更酷的语言出现、流行。它有可能是D语言,4GL,Ruby,Groovy。
 
验证码: (点击刷新验证码) 匿名发表
 

51CTO旗下网站

领先的IT技术网站 51CTO 领先的中文存储媒体 WatchStor 中国首个CIO网站 CIOage 中国首家数字医疗网站 HC3i 51CTO学院