`

转载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方面,有机会的话,会在以后的文档中继续说明。

分享到:
评论

相关推荐

    Java性能监控工具Jprofiler4.3.2

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

    Java生产环境下性能监控与调优详解视频教程

    Java生产环境下性能监控与调优详解视频教程 jstat查看JVM统计信息 jstack与线程的状态 MAT 分析内存溢出的方法 可视化工具分析GC日志 通过这套视频学习如何在生产环境下进行性能监控与调优。 视频在百度网盘中...

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

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

    JavaMelody开源系统性能监控

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

    Java 服务器信息监控

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

    JAVA实时屏幕监控

    JNI允许Java代码调用本地(非Java)代码,可能是为了优化性能或利用特定的操作系统功能,比如在屏幕监控中可能涉及到的低级别图形操作。 3. "monitor.exe" - 这个是Windows系统的可执行文件,很可能是屏幕监控的应用...

    java实现简单远程监控

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

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

    某课教程++++++Java生产环境下性能监控与调优详解,精品。

    大话JAVA性能优化.pdf

    具体包括:性能优化策略、程序编写及硬件服务器的基础知识、Java API优化建议、算法类程序的优化建议、并行计算优化建议、Java程序性能监控及检测、JVM原理知识、其他相关优化知识等。 通读《大话Java性能优化》后...

    javamelody监控

    - **性能监控**:展示HTTP请求的响应时间,分析性能瓶颈。 - **内存监控**:跟踪内存使用情况,预防内存泄漏。 - **数据库监控**:记录SQL查询,分析执行时间和次数,优化数据库性能。 - **JVM监控**:监控Java...

    定时调用java程序监控webservice或系统可用性

    本篇将详细探讨如何利用Java编写定时任务来监控Web服务或系统的可用性,并记录日志文件。 1. **定时任务框架** Java中的定时任务可以使用多种框架实现,如`java.util.Timer`类、`java.util.concurrent....

    java文件监控例子

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

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

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

    基于JAVA网络远程监控系统软件的实现(源码)

    这个基于JAVA的网络远程监控系统提供了强大的功能,包括硬件性能监控、软件运行状况检查、网络流量分析以及异常报警等。它使得管理员可以随时随地通过网络对目标系统进行监控和维护,提高了IT运维效率,降低了问题...

    一个针对高并发、低延迟应用设计的高性能 Java 性能监控和统计工具.zip

    《MyPerf4J:高并发、低延迟应用的Java性能监控与统计工具》 在当今的互联网时代,高并发、低延迟的应用程序是许多企业的核心竞争力。为了确保这类应用程序的稳定性和性能优化,开发者需要借助强大的性能监控和统计...

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

    生产环境下性能监控与调优视频详解,在Java开发的路上,更进一步提升调优技能。

    监控JAVA应用的好工具javamelody

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

    java项目 监控

    在Java编程领域,"监控"通常指的是应用程序性能监控(APM)或系统监控。这个小型Java项目显然旨在提供一个解决方案,以便开发者或者运维人员能够实时跟踪和分析Java应用的运行状态。监控是至关重要的,因为它可以...

    Javamelody监控

    JavaMelody是一款强大的Java应用程序性能监控工具,专为开发者和运维人员设计,用于实时监控Web应用的性能和健康状况。它能够集成到Spring、Struts、JSF等主流的Java Web框架中,提供包括请求时间、内存使用、数据库...

    java监控工具

    4. **YourKit Java Profiler**: YourKit是另一款强大的商业Java性能监控工具,特别适合进行内存泄漏检测和CPU性能分析。它拥有直观的用户界面和强大的分析报告。 5. **JMX**: Java Management Extensions (JMX) 是...

Global site tag (gtag.js) - Google Analytics