`

转载Java性能监控的一些记录

阅读更多

转载地址:http://vipshichg.iteye.com/blog/1995254

 

本篇所有内容都是基于JDK5,如使用JDK6会有差别。

  在前些日子,我们做了一些性能监控的工作,有一些值得记录的地方:

  JDK自身提供了很多工具,基于命令行和GUI的都有,学会合理应用它们是很有用处的。

  首先是jmap,这是一个命令行程序,用来查看JVM中对象数量情况,直接输入jmap会显示用法,下面是两个常用的功能:

  Java代码

 

jmap -histo 'jvmPid' > memory.txt

 

我的实验:

我的javaw.exe的进程号是7184,所以cmd运行C:\> jmap -histo 7184> memory.txt

可查看我的C盘下的memory.txt

 

  其中jvmPid为当前虚拟机进程的系统ID号,等待过后,memory.txt会按空间占用由大到小的顺序保存当前虚拟机运行中存在的对象类型,我们可以由此看出哪些类型对象占的空间和生成的数目较多,尤其是在自定义对象出现问题导致不能及时回收,这个功能是很有用的。

  Java代码

 

jmap -heap:format=b 'jvmPid'

 

我的实验:

我的javaw.exe的进程号是6096,jdk1.6   Memory Analyzer-1.3.0.2

cmd运行C:\> jmap -dump:format=b,file=heap.bin 6096

 

 

 

  和上面的不同,上面是生成一个文本文件,而这里会生成一个二进制快照文件,可以用相应的分析软件来打开它来进行功能更全面的检测,如Eclipse Memory Analyzer(下载地址:http://www.eclipse.org/mat/downloads.php,安装指导:http://blog.csdn.net/yanghongchang_/article/details/7711911)。

  需要注意的是,上面的导出快照命令,在1G左右JVM内存的情况下,要大概等待1分钟左右的时间,且执行时会使JVM暂停执行,因此不要在正式运行系统的高峰期或关键时刻使用。

  接下来是jstat,这也是一个命令行程序,用来查看JVM的各个内存和GC的使用情况,用法和参数非常多,有两个我们用到的功能:

  Java代码

 

jstat -gcutil 'jvmPid'

 

  会显示此刻GC的情况,其中YGC和FGC代表小GC和大GC的次数,YGCT和FGCT则代表小GC和大GC运行的占用时间,正常情况下,大GC的次数应远远小于小GC,例如我当前的系统小GC已经有10w次,而大GC只有50次,这是程序设计运行良好的表现。

  Java代码

 

jstat -gccapacity 'jvmPid'

 

  会显示此刻GC各内存池占用量,和上条命令结果结构类似,同时也有一个问题,显示的数据不是很直观,如果通过GUI观看就好多了。

  JVM自带了GUI监控状态的功能,在JDK5中,我们需要做一些配置手动开启它,首先我们要在JVM启动项增加一些属性,假设我们的系统是一个运行在tomcat容器下的项目,我们就可以修改JAVA_OPTS变量来开启监控服务

  Java代码

 

JAVA_OPTS="$JAVA_OPTS -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=12345 -Dcom.sun.management.jmxremote.ssl=false"

 

  这将开启远程基于jmx监控的服务功能,这样的配置方式,同时也开启了默认的身份验证机制,我们还需要在另外的地方设置权限,用户名和密码才能登录,我们先把这些服务端剩下的工作搁置一旁,先说说客户端的部分。

  我们需要GUI客户端访问工具来远程查看该虚拟机的信息,JDK5自带了一个名为jconsole的客户端,可以在JDK目录的bin文件夹下找到它并可以直接双击运行,点击“远程”标签,之后输入远程IP,端口,用户名和密码,如服务端配置正常,即可成功访问。

  回到服务端上来,我们还需要配置JVM的远程用户名和密码,这个要修改$JAVA_HOME/jre/lib/management/jmxremote.access和jmxremote.password.template文件。

  首先直接修改jmxremote.access文件,取消最后两个用户名的注释,改为

  Java代码

 

  1. monitorRole   readonly     
  2. controlRole   readwrite \     
  3.               create javax.management.monitor.*,javax.management.timer.* \     
  4.               unregister

这两个用户的区别显而易见,你取消一个当然也可以。

  然后修改jmxremote.password.template的文件名,将其改成jmxremote.password,之后同样编辑最后两行用户,将密码改成你想要的,很简单吧。

  之后还要做一步,将jmxremote.password文件的权限改为可读可写

  Java代码

 

chmod 600 $JAVA_HOME/jre/lib/management/jmxremote.password

 

  至此,还有最后一点需要注意,要将/etc/hosts文件中127.0.0.1修改成你真正的外网IP,如210.209.83.37,并且运行hostname -i命令返回的IP也应该是210.209.83.37才可以,每次修改完上述文件,要重新启动JVM,监控服务才会生效。

  大功告成,开启JVM以后,我们可以运行jconsole客户端,输入IP端口,用户名和密码,用户名为monitorRole或controlRole或你自定义的(权限不同)。

  也可以免去用户验证部分,只需要再加入-Dcom.sun.management.jmxremote.authenticate=false即可,也可以通过修改com.sun.management.jmxremote.password.file和com.sun.management.jmxremote.access.file自定义权限文件和密码文件的位置,不过这也没有什么太大必要。

  成功登录后,因为是GUI界面,所有信息可以很直观的被我们所学习和接受,但还需要我们具备一些JVM的知识,尤其是GC方面,有机会的话,会在以后的文档中继续说明。

分享到:
评论

相关推荐

    JavaMelody JAVA Web项目服务器性能监控工具

    JavaMelody是一款强大的JAVA Web项目服务器性能监控工具,它能够实时、全面地监控应用程序的运行状态,帮助开发者和运维人员了解系统性能瓶颈,及时发现并解决问题。通过在Java Web应用中简单集成,JavaMelody就能...

    Java性能监控工具Jprofiler4.3.2

    Java性能监控工具JProfiler是Java开发中的重要辅助软件,它为开发者提供了深入的性能分析功能,帮助优化应用程序的运行效率。JProfiler 4.3.2版本是该工具的一个历史版本,虽然较新版本可能拥有更多特性,但4.3.2...

    开源 Java 性能监控 (APM) 方案.zip

    开源 Java 性能监控 (APM) 方案。.zip,APM, (Application Performance Management) tool for large-scale distributed systems written in Java.

    关于Java性能监控您不知道的5件事

    关于Java性能监控您不知道的5件事

    Java生产环境下性能监控与调优详解课程笔记(完整版)

    在Java生产环境中,性能监控与调优是保证系统稳定、高效运行的关键环节。这份"Java生产环境下性能监控与调优详解课程笔记(完整版)"涵盖了多个重要的知识点,旨在帮助开发者和运维人员提升Java应用的性能。 一、Java...

    Java自带的性能监控工具使用简介

    Java 自带的性能监控工具使用简介 Java 自带的性能监控工具使用简介 jconsole 和 VisualVM 是 Java 自带的性能监控工具,能够帮助开发者监控和优化 Java 应用程序的性能。 VisualVM VisualVM 是 Java 6 自带的...

    JavaMelody开源系统性能监控

    JavaMelody是一款强大的开源系统性能监控工具,专为Java应用程序设计。它允许开发者和运维人员实时监测应用的运行状态,从而有效地识别并解决性能问题。JavaMelody通过简单的集成方式,提供了一整套全面的监控指标,...

    Java 服务器信息监控

    本文将详细探讨使用Java实现的服务器监控程序,以及如何利用它来监控CPU、内存、网络连接和服务状态。 Java作为一种跨平台的语言,为开发服务器监控工具提供了便利。在"Java 服务器信息监控"项目中,开发者可以编写...

    Java生产环境下性能监控与调优详解

    基于JDK命令行的监控 基于JVisualVM的可视化监控 基于Btrace的监控调试 Tomcat性能监控与调优 Nginx性能监控与调优 JVM层GC调优 JVM字节码与java代码层调优

    java实现简单远程监控

    8. **日志和通知**:集成日志系统,以便记录和分析监控数据。同时,可以设置通知机制,当达到预设阈值时发送警报。 在实际项目中,我们还需要考虑性能优化、并发处理、数据缓存等技术,以确保系统在高负载下仍能...

    阿里+Java+开发手册、阿里巴巴Java性能调优实战

    例如,书中可能会介绍如何使用JProfiler或VisualVM等工具进行性能监控,理解JVM垃圾回收机制,以及如何调整JVM参数以优化内存使用。同时,它还会涉及SQL查询优化,如避免全表扫描,使用索引提升查询速度,以及如何...

    javamelody性能监控jar和war

    JavaMelody是一款强大的开源性能监控工具,主要用于监测Java Web应用程序的运行情况。它提供了一整套功能,包括请求处理时间、内存使用、数据库查询、线程状态、HTTP session信息等,帮助开发者和运维人员实时了解...

    Java内存监控工具Java VisualVM

    Java VisualVM是一款强大的Java应用程序性能分析和诊断工具,主要用于监控和分析Java应用的运行时行为,包括但不限于内存使用情况、线程状态、CPU使用率等关键指标。它可以帮助开发者识别并解决性能瓶颈问题,提高...

    Java web Service性能监视

    Java Web Service性能监视是针对基于Java的Web服务应用程序的性能监控过程,主要目的是确保系统高效稳定运行,并在问题出现时能够快速定位和解决。在大型企业如电信或移动级别公司的运营中,数据库管理员(DBA)的...

    java文件监控例子

    Java文件监控是一个重要的功能,它允许程序实时检测文件或目录的改变,如创建、...在实际开发中,可以根据需求调整监控的粒度和性能优化,比如设置适当的缓冲以减少不必要的回调,或者采用异步处理来避免阻塞主线程。

    java服务器资源监控脚本.zip

    监控脚本可以记录磁盘I/O等待时间和操作速率,帮助识别I/O密集型操作,优化存储策略,减少I/O冲突,提高整体性能。 5. **JVM GC行为分析**: Java虚拟机的垃圾回收机制是自动管理内存的关键,但不当的配置可能导致...

    监控JAVA应用的好工具javamelody

    Rrdtool是一种高效的数据存储方案,特别适合于长期保存时间序列数据,如性能监控数据。jrobin库使得JavaMelody能够在不依赖外部软件的情况下,本地持久化监控数据,方便后期分析和对比。 要开始使用JavaMelody,...

    Java实现实时监控目录下文件变化的方法

    Java实现实时监控目录下文件变化的方法 Java实现实时监控目录下文件变化的方法是指通过Java语言来实现实时监控目录下文件的变化情况,包括文件的创建、删除、修改等操作。这种方法可以应用于各种场景,例如文件系统...

    java远程监控源码

    标题“Java远程监控源码”涉及的是Java编程中关于远程监控和控制的实现。这个项目可能包含一个客户端(client)和服务器端(server)的架构,通过Socket通信进行数据交互,利用Java Robot类来捕获屏幕图像,以及...

    Java程序监控API Java Simon

    Java Simon 是一个强大的Java应用程序监控API,它提供了一组丰富的计时器、计数器、内存计数器和采样器等工具,帮助开发者实时监控和优化应用性能。这个库小巧且易于集成,使得开发者可以在不牺牲应用性能的前提下,...

Global site tag (gtag.js) - Google Analytics