JDK5的jconsole(+调试内存泄漏经验介绍 jps/jmap/jstat)
(2010-11-09 09:06:52)
转载
标签:
java
内存
泄漏
经验介绍
it
分类: IT
JDK5的jconsole(+调试内存泄漏经验介绍 jps/jmap/jstat)
jconsole工具介绍
Jconsole(Java Monitoring and Management Console)是从java5开始,在JDK中提供的java监控和管理控制台。用于对JVM中内存,线程和类等的监控。
基本配置
-本文使用java6,SUN JDK1.6.0_03,使用JDK1.5版本使用略有不同。
-本文使用windows XP。
-确认jdk的bin目录设置到环境变量Path中。
-在命令行中输入:【jconsole】。。。。如果弹出窗口,说明配置可用。
基本使用
这里使用的是本地JVM监控,如果要监控远程的JVM需要另外的配置。
首先,启动需要监控的Java应用程序。
通过任务管理器的进程标签,查看该进程的PID,比如是1388
在命令行启动jconsole:【jconsole 1388】
在启动的界面中:
-概述:有关堆内存使用情况,线程,类加载和CPU使用情况的综述;
-内存:内存的详细情况,堆和其他内存;
-线程:峰值/活动线程,另外,各个线程的明细信息,检测死锁;
-类:监控加载和卸载的类;
-vm摘要:有关vm的明细信息
-MBean:当前Java程序的MBean(如果有的话)的操作。
http://gq913.iteye.com/blog/160979 tomcat中配置jconsole远程访问(附命令)
catalina.bat:
set JAVA_OPTS=%JAVA_OPTS% -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port="9004" -Dcom.sun.management.jmxremote.authenticate="false" -Dcom.sun.management.jmxremote.ssl="false"
catalina.sh:
JAVA_OPTS="$JAVA_OPTS -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=9004 -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false"
一些命令:
访问本地:
【注意:如果启动的jconsole和JVM(Java)不是在同一个JDK目录下使用下面命令:jconsole pid】
http://xsen.iteye.com/blog/150317 配置jconsole远程监视 (jconsole Remote Monitoring)
环境:
服务器端: Linux + jdk1.5.0 + resin3 /客户端: Windows + jdk1.5.0
jconsole远程监视的配置步骤如下:
服务器端:
1. mkdir $JAVA_HOME/jconsole_pwd
2. cp $JAVA_HOME/jre/lib/management/jmxremote.password.template $JAVA_HOME/jconsole/jmxremote.password -> chmod 600 $JAVA_HOME/jconsole/jmxremote.password
3. vi jmxremote.password 去掉#monitorRole RED前的注释并将RED修改为你要设置的密码。(安全起见,只开放有只读权限的用户)
4. 修改 $RESIN_HOME/bin/wrapper.pl,为$JAVA_ARGS添加三个参数:
-Dcom.sun.management.jmxremote.port=1010
-Dcom.sun.management.jmxremote.password.file=/usr/local/jdk1.5.0/jconsole_pwd/jmxremote.password
-Dcom.sun.management.jmxremote.ssl=false
5. 执行hostname -i ,如果显示的是127.0.0.1,则需要修改/etc/hosts文件
6. vi /etc/hosts,修改如下:
#127.0.0.1 localhost localhost.localdomain localhost
服务器的真实IP地址 localhost localhost.localdomain localhost
具体原因是服务器端解释机器名的问题,相关问题见: http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6209663
服务器端配置参见: http://java.sun.com/j2se/1.5.0/docs/guide/management/agent.html#remote
7. 启动resi -> netstat -na|grep 1010 查看1010端口是否已在监听
客户端:
1. 打开cmd窗口,输入jconsole
2. 指定连接参数:
远程主机: 服务器的真实IP地址
端口: 1010 ($JAVA_ARGS中-Dcom.sun.management.jmxremote.port指定的端口)
用户名: monitorRole (jmxremote.password中指定的用户名)
密码: your_password(jmxremote.password中设置的密码)
3. 连接 -> OK。。。
客户端配置参见: http://java.sun.com/j2se/1.5.0/docs/guide/management/jconsole.html
jconsole文档地址:http://java.sun.com/j2se/1.5.0/docs/tooldocs/share/jconsole.html
http://fly-hyp.iteye.com/blog/300024 java调试内存泄漏经验介绍
修订记录:创建:2008年12月23日,修改:2008年12月24日 增加调试流程描述
今天要处理项目下的一个内存泄露的问题。使用了jprobe 工具,在测试环境反复调试不能发现问题的原因。最后使用jdk自带的jps jmap jstat 等工具顺利的查找到了内存泄露的原因。下面对jdk自带的jps jmap jstat工具总结介绍一下,希望以后同道中人google一下,找到这篇文章对大家有所帮助。尽量介绍的简明扼要,如果需要最详细的参考请翻阅jdk doc tools部分,如果有什么疑问请留言。
jps:
相当于linux下的ps,列出所有java相关线程的pid等信息
example:
[tdwiki@installed-host-eth0 ~]$ jps
18861 Bootstrap
1418 Jps
jmap:
显示java进程内存使用的相关信息
jmap pid 打印内存使用的摘要信息
jmap -histo pid >mem.txt 打印比较简单的各个有多少个对象占了多少内存的信息,一般重定向的文件
jmap -dump:format=b,file= mem.dat pid 将内存使用的详细情况输出到mem.dat 文件
用jhat命令可以参看 jhat -port 7000 mem.dat
在浏览器中访问:http://10.5.22.65:7000/ 查看详细信息
jstat:
显示java虚拟机的一些统计信息
jstat -选项 pid 间隔显示时间显示次数
jstat -gc 18861 250 10
jstat -gccapacity 18861 250 10
jstat -gcnew 18861 250 10
jstat -gcnewcapacity 18861 250 10
jstat -gcold 18861 250 10
我的调试流程
内存泄漏一般都是有一定特征的,任何代码和数据都要占用内存,我简单总结内存泄漏的特征是内存占用不可控制,GC不可回收。我追踪内存使用量的曲线发现一些特征,在估计虚拟机即将崩溃时,使用 jmap -F -histo pid >mem.txt 发现相关内存泄漏的对象占用非常打比例的内存空间,然后很容易猜测问题大概的位置,一下子就解决了。
转自:http://blog.sina.com.cn/s/blog_594196850100mp5r.html
分享到:
相关推荐
本文将介绍五种JVM监控工具:jstack、jconsole、jinfo、jmap和jdb。 jstack jstack是一款命令行工具,用于生成Java应用程序的崩溃dump文件的信息。该工具可以attach到正在运行的Java应用程序中,查看当前运行的...
--slave /usr/bin/jconsole jconsole /opt/jdk1.6.0_11/bin/jconsole --slave /usr/bin/jdb jdb /opt/jdk1.6.0_11/bin/jdb --slave /usr/bin/jhat jhat /opt/jdk1.6.0_11/bin/jhat --slave /usr/bin/jinfo jinfo...
本文将深入探讨六种关键的JVM监控工具——`jstack`, `jconsole`, `jinfo`, `jmap`, `jdb`, `jstat`——它们各自的功能、应用场景及如何帮助开发者和运维人员诊断并解决JVM中的复杂问题。 #### 1. jstack —— Java ...
本篇将详细介绍JDK自带的几个主要调试工具,包括`jmap`、`jstack`、`jconsole`,以及相关的文档资源。 1. `jmap`:这是一个用于诊断堆内存状况的工具。通过`jmap`,我们可以获取到堆内存的详细映射,包括对象分配...
- **功能**:jmap 主要用于生成堆内存的转储快照,便于分析内存泄漏等问题。 - **使用场景**:当怀疑应用程序存在内存泄漏时,使用 jmap 生成 heap dump 文件,进一步通过其他工具(如 MAT 或 VisualVM)进行分析。 ...
为了有效地监控和调试Java应用程序,Oracle JDK提供了多种强大的命令行工具,如jconsole、jmap、jstat等。下面将详细解释这些工具的功能和使用场景。 1. **jstack**: jstack是一种用于生成Java线程堆栈跟踪的工具...
本文将详细介绍 JDK 自带的几个核心 VM 分析工具:jps、jstat、jmap 和 jconsole,并探讨它们各自的功能及应用场景。 #### jps - 查看运行中的 Java 进程 **jps** 类似于 Unix/Linux 系统中的 `ps` 命令,用于列出...
它包含的工具如jps、jstat、jmap、jinfo、jstack和JConsole,都是JDK的标准组成部分,帮助开发者深入理解JVM的内存状态。 1. **jps (Java Virtual Machine Process Status Tool)** 类似于Unix系统中的`ps`命令,...
Linux平台上的Java Development Kit(JDK)是Java编程语言的核心组件,它包含了编译、调试、性能分析等工具,使得开发者能够在Linux系统上编写、测试和运行Java应用程序。本资源为"linux x86 jdk 1.8",特别针对32位...
9. **其他实用工具**:如appletviewer、extcheck、idlj、jar、jarsigner、jarsigner.bat、java-rmi.cgi、jconsole、jdb、jhat、jinfo、jnlp、jmap、jmc、jps、jrunscript、jsadebugd、jstack、jstat、jstatd、...
- **jps**、**jinfo**、**jstat**和**jstack**:系统监控和诊断工具,提供进程状态、配置信息、统计信息和线程堆栈跟踪。 **总结** JDK V1.8.0u172是Java 8的一个重要更新,它的API规范、新功能以及丰富的开发工具...
- **功能介绍**:`jconsole`是JDK自带的一个GUI工具,用于监控JVM的运行状态。 - **主要功能**: - 监控JVM内存使用情况。 - 查看垃圾收集器的状态。 - 查看线程信息。 ##### 9. Memory Analyzer Tool(MAT)...
10. **jps**,**jstat**,**jinfo**,**jmap**,**jhat**等:这些是用于系统监控和故障排查的命令行工具。 JDK 8的亮点特性包括: 1. **Lambda表达式**:引入函数式编程概念,使得代码更加简洁和高效。 2. **方法...
7. **其他工具**:如appletviewer、apt、extcheck、idlj、jarsigner、jconsole、jdb、jdwp、jhat、jinfo、jmap、jmc、jps、jrunscript、jstack、jstat、jstatd等,它们提供了各种附加功能,如性能监控、内存分析等。...
### Java内存监控与JDK 5.0调试工具详解 #### 一、获取JVM进程的方法 在进行Java应用的调试或性能优化时,首先需要确定目标Java虚拟机(JVM)的进程信息。传统的做法是通过命令`ps auxf | grep java`来查找Java...
以上就是JDK中一些常用命令的基本介绍。熟练掌握这些命令,可以极大地提升Java开发和故障排查的效率。实际应用中,开发者还需要结合具体场景灵活运用,并了解更多的JDK工具,以便更好地管理和优化Java应用程序。
JDK的`jps`、`jstat`、`jmap`、`jhat`等工具是Java性能监控和诊断的利器。例如,`jps`可以列出正在运行的Java进程,`jstat`可以收集JVM的统计信息,而`jhat`则用于分析堆转储文件,这些都是优化Java应用程序性能的...
jmap主要用于生成堆内存转储文件,这对于分析内存泄漏等问题非常重要。此外,jmap还可以用于查看堆内存的总体使用情况。 ##### 常用命令 - **生成堆转储**:`jmap -dump:format=b,file=<file_name> <pid>` - **查看...
最后,文档通过案例分析,介绍了内存泄露、CPU问题、线程死锁和ClassLoader类加载泄露的诊断和解决方法。这些内容为开发者提供了一套完整的监控和分析工具的知识体系,以便更好地理解和应用这些工具来提升Java应用的...