`
wbj0110
  • 浏览: 1587311 次
  • 性别: Icon_minigender_1
  • 来自: 上海
文章分类
社区版块
存档分类
最新评论

Java性能监控的一些记录

阅读更多

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

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

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

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

  Java代码

 

jmap -histo 'jvmPid' > memory.txt

 

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

  Java代码

 

jmap -heap:format=b 'jvmPid'

 

  和上面的不同,上面是生成一个文本文件,而这里会生成一个二进制快照文件,可以用相应的分析软件来打开它来进行功能更全面的检测,如Eclipse Memory Analyzer。

  需要注意的是,上面的导出快照命令,在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...

    JavaMelody开源系统性能监控

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

    JAVA实时屏幕监控

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

    java实现简单远程监控

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

    基于java远程监控软件

    以上是基于Java开发远程监控软件涉及的关键技术,实际开发中,还需要考虑性能优化、用户体验、系统稳定性和可扩展性等因素。在“yckz”这个压缩包中,可能包含源代码、配置文件、文档等相关资源,深入研究这些内容将...

    javamelody性能监控jar和war

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

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

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

    Java web Service性能监视

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

    javamelody监控

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

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

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

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

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

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

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

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

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

    监控JAVA应用的好工具javamelody

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

    java监控系统

    - JProfiler:一款强大的商业Java性能分析器,支持内存泄漏检测、CPU剖析、线程分析等功能。 - YourKit Java Profiler:同样是一款功能强大的Java性能分析工具,提供了详细的内存分析和CPU剖析。 2. **JVM监控** ...

    Javamelody监控

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

    java开发的一个windows的远程监控软件

    标题中的“java开发的一个windows的远程监控软件”表明这是一个使用Java编程语言开发的应用程序,其主要功能是针对Windows操作系统进行远程监控。Java是一种跨平台的编程语言,这意味着编写好的Java程序可以在任何...

    cat性能监控demo资源

    Cat是Java开发的开源项目,主要设计用于分布式环境中的应用性能监控。它提供了包括但不限于以下功能: - **日志收集**:集中式的日志查看和检索。 - **服务调用链追踪**:记录每一次服务间的调用过程,帮助定位...

Global site tag (gtag.js) - Google Analytics