`
丢死人了
  • 浏览: 5222 次
  • 性别: Icon_minigender_1
  • 来自: 北京
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

分享Java性能监控的小技巧

阅读更多

 

阅读文章之前,大家可以先看一看这篇文章,《关于Java性能监控的一些记录》,也许会对你有帮助。

很多开发者觉得自己懂Java编程,事实是大多数开发人员都只领会到了Java平台的皮毛,所学也只够应付工作。作者将深度挖掘Java平台的核心功能,揭示一些鲜为人知的事实,帮助您解决最棘手的编程困难。

当应用程序性能受到损害时,大多数开发人员都惊慌失措,这在情理之中。跟踪Java应用程序瓶颈来源一直以来都是很麻烦的,因为Java虚拟机有黑盒效应,而且Java平台分析工具一贯就有缺陷。

然而,随着Java5中JConsole的引入,一切都发生了改变。JConsole是一个内置Java性能分析器,可以从命令行或在GUIshell中运行。它不是完美的,但是当尖头老板来问你关于性能的问题时,用它来应对还是绰绰有余的——这比查询PapaGoogle要好得多。

我们将向您展示5个方法,使您可以轻松地使用JConsole(或者,它更高端的“近亲”VisualVM)来监控Java应用程序性能和跟踪Java中的代码。

相关文章

1.远程连接进程

因为Web应用程序分析工具假设通过一个套接字进行连通性分析,您只需要进行少许配置来设置JConsole(或者是基于JVMTI的分析器,就这点而言),监控/分析远程运行的应用程序。

如果Tomcat运行在一个名为“webserve”的机器上,且JVM已经启动了JMX并监听端口9004,从JConsole(或者任何JMX客户端)连接它需要一个JMX URL“service:jmx:rmi:///jndi/rmi://webserver:9004/jmxrmi”。

基本上,要分析一个运行在远程数据中心的应用程序服务器,您所需要的仅仅是一个JMX URL。

2.JDK附带分析器

许多开发人员没有意识到从Java 5开始JDK中包含了一个分析器。JConsole(或者Java平台最新版本,VisualVM)是一个内置分析器,它同Java编译器一样容易启动。如果是从命令行启动,使JDK在PATH上,运行jconsole即可。如果从GUIshell启动,找到JDK安装路径,打开bin文件夹,双击jconsole。

当分析工具弹出时(取决于正在运行的Java版本以及正在运行的Java程序数量),可能会出现一个对话框,要求输入一个进程的URL来连接,也可能列出许多不同的本地Java进程(有时包含JConsole进程本身)来连接。

使用JConsole进行工作

在Java 5中,Java进程并不是被设置为默认分析的,而是通过一个命令行参数—-Dcom.sun.management.jmxremote——在启动时告诉Java 5 VM打开连接,以便分析器可以找到它们;当进程被JConsole捡起时,您只能双击它开始分析。

分析器有自己的开销,因此最好的办法就是花点时间来弄清是什么开销。发现JConsole开销最简单的办法是,首先独自运行一个应用程序,然后在分析器下运行,并测量差异。(应用程序不能太大或者太小;我最喜欢使用JDK附带的SwingSet2样本。)因此,我使用-verbose:gc尝试运行SwingSet2来查看垃圾收集清理,然后运行同一个应用程序并将JConsole分析器连接到它。当JConsole连接好了之后,一个稳定的GC清理流出现,否则不会出现。这就是分析器的性能开销。

JConsole或VisualVM?

JConsole从Java 5开始就随着Java平台版本一起发布,而VisualVM是在NetBeans基础上升级的一个分析器,在Java 6的更新版12中第一次发布。多数还没有更新到Java 6,因此这篇文章主要介绍JConsole。然而,多数技巧和这两个分析器都有关。

3.跟踪统计

JConsole有许多对收集统计数据有用的选项卡,包括:

  • Memory:在JVM垃圾收集器中针对各个堆跟踪活动。
  • Threads:在目标JVM中检查当前线程活动。
  • Classes:观察VM已加载类的总数。

这些选项卡(和相关的图表)都是由每个Java 5及更高版本VM在JMX服务器上注册的JMX对象提供的,是内置到JVM的。一个给定JVM中可用bean的完整清单在MBeans选项卡上列出,包括一些元数据和一个有限的用户界面来查看数据或执行操作。(然而,注册通知是在JConsole用户界面之外。)

使用统计数据

假设一个Tomcat进程死于OutOfMemoryError。如果您想要弄清楚发生了什么,打开JConsole,单击Classes选项卡,过一段时间查看一次类计数。如果数量稳定上升,您可以假设应用程序服务器或者您的代码某个地方有一个ClassLoader漏洞,不久之后将耗尽PermGen空间。如果需要更进一步的确认问题,请看Memory选项卡。

不要成为典型

发现应用程序代码中性能问题的常用响应多种多样,但也是可预测的。早期的Java编程人员对旧的IDE可能十分生气,并开始进行代码库中主要部分的代码复查,在源代码中寻找熟悉的“红色标志”,像异步块、对象配额等等。随着编程经验的增加,开发人员可能会仔细研究JVM支持的-X标志,寻找优化垃圾收集器的方法。当然,对于新手,直接去Google查询,希望有其他人发现了JVM的神奇的“make it go fast”转换,避免重写代码。

从本质上来说,这些方法没什么错,但都是有风险的。对于一个性能问题最有效的响应就是使用一个分析器——现在它们内置在Java平台,我们确实没有理由不这样做!

4.JConsole并不是高深莫测的

作为一个分析器实用工具,JConsole是极好的,但是还有更好的工具。一些分析插件附带分析器或者灵巧的用户界面,默认情况下比JConsole跟踪更多的数据。

JConsole真正吸引人的是整个程序是用“普通旧式Java”编写的,这意味着任何Java开发人员都可以编写这样一个实用工具。事实上,JDK其中甚至包括如何通过创建一个插件来定制JConsole的示例。建立在NetBeans顶部的VisualVM进一步延伸了插件概念。

如果JConsole(或者VisualVM,或者其他任何工具)不符合您的需求,或者不能跟踪您想要跟踪的,或者不能按照您的方式跟踪,您可以编写属于自己的工具。如果您觉得Java代码很麻烦,Groovy或JRuby或很多其他JVM语言都可以帮助您更快完成。

您真正需要的是一个快速而粗糙(quick-and-dirty)的由JVM连接的命令行工具,可以以您想要的方式确切地跟踪您感兴趣的数据。

5.为离线分析创建一个堆转储

生产环境中一切都在快速地进行着,您可能没有时间花费在您的应用程序分析器上,相反地,您可以为Java环境中的每个事件照一个快照保存下来过后再看。在JConsole中您也可以这样做,在VisualVM中甚至会做得更好。

先找到MBeans选项卡,在其中打开com.sun.management节点,接着是HotSpotDiagnostic节点。现在,选择Operations,注意右边面板中的“dumpHeap”按钮。如果您在第一个(“字符串”)输入框中向dumpHeap传递一个文件名来转储,它将为整个JVM堆照一个快照,并将其转储到那个文件。

稍后,您可以使用各种不同的商业分析器来分析文件,或者使用VisualVM分析快照。(记住,VisualVM是在Java 6中可用的,且是单独下载的。)

结束语

Java性能监控不止于JConsole或VisualVM——在JDK中隐藏着一整套工具,只是大多数开发人员并不知道。希望对你有帮助。

摘自:51cto

 

分享到:
评论

相关推荐

    java性能监控

    【Java性能监控】 Java性能监控是针对Java应用程序的性能分析和优化过程,目的是确保程序运行高效,资源使用合理。在Java环境中,性能监控通常包括CPU使用率、内存使用情况、线程状态、垃圾回收(Garbage ...

    4本高清中文版Java性能优化经典书籍

    书中详细阐述了Java性能监控和调优的策略,包括性能测试、CPU使用率分析、内存泄漏检测、线程分析等。通过这些工具和方法,开发者可以找出程序的瓶颈,从而针对性地优化代码。此外,书中还讲解了JDK自带的性能分析...

    Java性能优化技巧集锦.rar

    除此之外,Java性能监控工具的使用也是优化过程中的重要一环。例如,JVisualVM、Visual GC、JProfiler等可以帮助开发者实时查看和分析JVM的状态,定位性能瓶颈。通过对CPU、内存、线程等进行监控,可以有效地发现并...

    java性能优化教程

    Java性能优化是提升软件效率和用户体验的关键环节,尤其是在大规模应用和高并发场景中。本教程将深入探讨如何通过...这个"JAVA优化编程"PDF教程将引导你逐步掌握这些核心技巧,助你在Java性能优化的道路上更进一步。

    Java实际开发中的小技巧汇总

    在Java实际开发中,开发者经常会遇到各种挑战,需要掌握一些实用的小技巧来提高代码质量、提升效率。以下是一些从博客文章"Java实际开发中的小技巧汇总"中可能涵盖的知识点,结合“源码”和“工具”的标签,我们可以...

    Java 性能调优 Java 性能调优 Java 性能调优

    ### Java性能调优概述 #### 一、性能优化的重要性与基本概念 在现代软件开发中,性能优化是一项至关重要的任务。对于Java开发者来说,优化...希望读者能够在实践中不断探索,掌握更多关于Java性能调优的知识和技巧。

    大话JAVA性能优化

    在《大话JAVA性能优化》的PDF文档中,你将找到这些方面的详细讨论和实例分析,它不仅涵盖了理论知识,还提供了实战技巧和工具使用,是Java开发者进行性能优化的宝贵参考资料。通过深入学习和实践,开发者可以提升...

    Java 性能优化 一书源码

    Java性能优化是软件开发中的一个关键领域,尤其是在大型企业级应用和高并发系统中。《Java性能优化》一书深入探讨了如何通过各种技术提升Java应用程序的效率和响应速度。以下是一些基于书籍源码和相关文件名的关键...

    Java性能优化技巧集锦

    "Java性能优化技巧集锦"涵盖了大量用于改进Java代码质量和性能的策略与技术。以下是一些核心的Java性能优化知识点: 1. **内存管理**:理解Java内存模型,包括堆内存(Heap)和栈内存(Stack),以及垃圾收集机制。...

    java性能优化集锦

    本资料集锦主要涵盖了Java性能优化的多个方面,包括但不限于代码优化、内存管理、系统设计与优化等关键领域。 一、Java程序性能优化(23条) 1. **避免过度使用反射**:反射在某些场景下很有用,但其开销较大,应...

    Java性能优化实战视频全集

    ### Java性能优化实战知识点概述 #### 一、理论分析篇 **1.1 性能优化的衡量指标及注意事项** - **衡量指标**: 包括响应时间、吞吐量、资源利用率等。 - **注意事项**: 在进行性能优化时,需确保优化方案不会引入...

    java性能优化

    【Java性能优化】是开发者关注的重要话题,尤其是在服务器端应用中。Java自1990年代中期诞生以来,虽然凭借其跨平台特性受到欢迎,但性能一直是与C++等语言相比的一个短板。本文将从几个关键方面探讨Java性能优化。 ...

    Java编程性能优化技巧有哪些共7页.pdf.zip

    这份名为"Java编程性能优化技巧有哪些共7页.pdf.zip"的压缩文件很可能包含了关于Java性能优化的精华内容,尽管实际的文件列表中仅提及了"赚钱项目",但我们可以通过对Java性能优化的一般性理解和实践来探讨相关知识...

    eclipse开发性能优化、java代码性能优化

    性能监控与调优** - 使用 JProfiler、VisualVM 等工具进行性能分析,找出瓶颈。 - 定期执行压力测试和负载测试,确保应用在高并发场景下仍能稳定运行。 **总结** 通过上述介绍的 Eclipse 开发环境和 Java 代码...

    Java程序性能优化 让你的Java程序更快、更稳定

    在本文中,我们将深入探讨Java性能优化的关键点,帮助你的Java程序达到更快、更稳定的目标。 1. **JVM调优**:Java虚拟机(JVM)是Java程序运行的基础,优化JVM参数可以显著提升性能。例如,调整堆内存大小(-Xms和-...

    Java性能优化比较

    Java性能优化是提升Java应用程序效率的关键技术,涵盖了代码优化、内存管理、并发处理等多个方面。在Java开发过程中,了解并掌握这些优化技巧可以显著提高应用的响应速度和资源利用率。 首先,我们关注的是代码层面...

    提升Java的锁性能Java开发Java经验技巧共5页.p

    本篇内容将深入探讨如何提升Java的锁性能,结合Java开发的经验技巧,帮助开发者优化并发代码。 1. **了解锁的类型** - **内置锁(Synchronized)**:Java中的内置锁是通过关键字`synchronized`实现的,它提供了对...

    vc和java编程小技巧锦集

    - **Java性能优化**:了解JVM内存模型,使用JVisualVM进行性能监控,通过调整JVM参数优化程序运行效果。 5. **代码重构**: - **模块化设计**:使用面向对象的封装、继承、多态原则,使代码易于维护和扩展。 - *...

    java监控系统链接和内存使用情况

    Java监控系统对于理解应用程序的运行状况至关重要,特别是对于大型企业级应用来说,有效管理链接和内存使用能够确保系统的稳定性和高效性。本文将深入探讨Java监控系统如何监测和管理这两方面,以及相关的重要知识点...

Global site tag (gtag.js) - Google Analytics