在给客户进行应用程序维护的过程中,我注意到一些关于高负载条件下的性能问题。理论上,增加对应用程序的负载会使性能有所下降,但是我认为性能下降的比率远远高于负载的增加,同时我也发现,性能可以通过改变应用程序的逻辑来提升。为了更详细地了解这一点,我们需要做一些性能分析,这时,我们自然就要用到一些性能分析工具。Java有许多的性能分析工具,可以帮助我们弄清楚这个问题,但是我们应该使用哪一款工具呢?
为了做出正确的选择,我列出性能分析应满足一些最低要求:
- 必须包括对应用程序的类、方法及时间的监测
- 必须包括对内存的监测
- 必须具有易用性
我配置了一个使用RESTful接口的Spring应用程序,使用MongoDB作为数据存储,还使用Solr搜索,并在Tomcat服务器上部署。
参考工具:
1.VisualVM
VisualVM是一个资源分析工具,一直从JDK 6更新到7,它默认内存和CPU的监视,它可以告诉你哪个类和方法消耗资源,但它不会显示代码流程。
2.JProfiler
JProfiler很容易安装,并且通过向导,你可以选择应用服务器用来运行应用程序。我不得不选择使用JPofiler应用服务器的主目录,以及向导生成的一个单独的启动脚本。然后运行服务器。在监听会话的过程中,它会提供几个选项,它可以记录内存的使用和CPU的使用率。在查看CPU使用率的同时,可以看到执行路径。这让我看到应用程序大部分时间都花在请求上。我们可以将IntelliJ插件安装到IDE上,那么运行JProfiler会更加便利。比如,可以直接帮我启动Tomcat。
3.YourKit
YourKit是我在另一个项目中偶然发现的一款性能分析工具,它的安装很简单。安装时有一个选项,可以安装一个插件到我的IDE。安装后,运行应用程序,使用该插件,它会自动连接到YourKit。它有一个漂亮的用户界面可以查看到内存和CPU的监测,同时也可以看到请求的执行路径。
4.JProbe
我刚开始创建JProbe时遇到点困难。安装并不是直接完成,我需要对它进行配置。它采用了类似JProfiler一样的设置。它会在你的Tomcat目录中生成启动脚本,可以通过脚本启动服务器并监听会话。它的界面包含有按钮和表格,其中可以看到内存的使用,但无法在进程中找到执行路径。
5.Spring Insight
听到TC Server有Spring Insight监控界面,于是我兴奋地尝试了一下。安装完成后,并设置成TC Server的开发者版,然后部署应用程序在TC Server上。我查看Insight界面,它可以很好的监视类和方法,并能看到完成这个方法用了多少时间。我还能看到输入参数值,以及返回值。由于我的应用程序是基于Spring的,Spring Insight能够提供非常有用的数据。TC Server插件在IDE上的配置与Tomcat的配置类似。SpringSource工具套件就自带Spring Insight。
结 论
看到这五款性能分析工具,我可以肯定地说,它们都非常不错。如果你有基于Spring的应用程序,那么选择Spring Insight显然是最佳的。它一直是免费的,但你需要部署你的应用在TC Server上。
如果你想监听本地和远程的进程,我会选择JProfiler或YourKit.这两个也可以帮助Spring Insight来监测、找到性能瓶颈。
JProfiler和YourKit已经能满足我的上述要求。JProfiler、YourKit和Spring Insight都可以跟踪应用程序的类和方法的流向。JProfiler和YourKit可以显示内存使用情况。虽然Spring Insight不可以显示内存使用情况,但它可以很好的显示吞吐量的趋势。这三款性能分析工具功能很清楚,不混乱,而且容易使用。最后,他们都有自己的 IDE插件。希望本文能帮助你做出正确的选择。
来自:chinaitlab
相关推荐
Java文件对比工具是一种用于比较两个或多个文件之间差异的实用程序,特别适用于编程环境中检查代码间的相似性或差异。在Java开发中,这样的工具能够帮助开发者有效地定位代码修改的地方,协同工作时解决合并冲突,...
IBM内存分析工具(IBM Memory Analyzer,简称MAT)是一款强大的、免费的诊断工具,适用于所有Java虚拟机(JVM)。它能够提供详细的内存分配和引用路径信息,帮助开发者深入理解内存消耗情况,找出可能导致内存问题...
MAT(Memory Analyzer Tool)是Eclipse基金会开发的一款强大的Java堆内存分析工具,专门用于诊断Java应用程序的内存问题,如内存泄漏、内存占用过高以及对象生命周期管理等。标题中提到的"mat工具,可以分析hprof...
2. 生成Java类:使用JAXB工具(如`xjc`命令行工具或Maven插件)对XSD文件进行编译,自动生成对应的Java类。这些类包含了XML元素和属性的映射。 3. 解析XML:有了Java类,我们就可以使用JAXB提供的`Unmarshaller`...
- **JDK (Java Development Kit)**:是 Java 开发工具包,包含了编译器(javac)、解释器(java)、文档生成工具(javadoc)等用于开发 Java 应用程序的各种工具。它是程序员进行 Java 开发的基础。 - **JRE (Java ...
YourKit Java Profiler 2019.08 build 141 是一款强大的性能分析工具,专为Java应用程序设计,旨在帮助开发者深入洞察代码执行的效率和内存使用情况。这款工具提供了丰富的功能,包括CPU和内存分析,线程监控,...
1. 前提 2. Java的学习 3. 目标 4. 联机文档 5. 章节 6. 练习 7. 多媒体CD-ROM 8. 源代码 9. 编码样式 10. Java版本 ...D.4.1 性能工具 D.4.2 Web站点 D.4.3 文章 D.4.4 Java专业书籍 D.4.5 一般书籍
- **ArrayList与LinkedList**:对比分析两种不同的列表实现,讨论它们在插入、删除、查找操作上的性能差异。 - **HashMap与HashSet**:理解键值对存储的原理,以及无序不重复元素集合的实现。 - **TreeMap与...
7. **项目评估**:分析项目的优点和不足,并提出改进建议。 8. **技术成长**:总结通过项目获得的技术经验和成长点。 ### Java基础知识 #### 关键知识点: 1. **集合类的区别**: - **List** 和 **Set** 的主要...
APT Android Performance Testing Tools 开源项目 适用于开发自测和定位性能瓶颈 帮助测试人员完成性能基准测试 竞品测试 APT提供了CPU利用率实时曲线图 多维度内存实时曲线图 方便竞品对比测试和定位内存泄露问题...
5. **IO/NIO/BIO**:对比分析三种I/O模型的优缺点,重点讲解非阻塞I/O(NIO)的应用。 6. **Java虚拟机(JVM)**:介绍JVM的工作原理,包括类加载机制、内存管理(堆、栈、方法区等)、垃圾回收机制以及性能优化...
Java毕业设计论文通常涉及到软件开发的全过程,包括需求分析、系统设计、编码实现、测试调试...每个项目都提供了实践Java编程语言和相关技术的机会,同时,通过对比分析,可以展示不同应用场景下的技术解决方案和挑战。
#### 六、Java ME与现代移动开发的对比 - **跨平台能力**:现代框架如React Native、Flutter提供了更好的跨平台体验。 - **性能**:随着硬件的发展,现代移动应用可以利用更多的资源提高性能。 - **生态系统**:现代...
本教程旨在通过实际操作和案例分析,让学习者在实践中提升编程技能,了解Java语言的核心概念、语法特性以及常用API的使用。 Java是一种广泛应用于企业级应用开发、移动应用开发(如Android)、大数据处理等多个领域...
CSDN(Chinese Software Developer Network)是中国最大的开发者社区,它为程序员和IT专业人士提供了一个学习、交流和分享的平台。"CSDN文档中心"是该网站的重要组成部分,汇集了大量的技术文档、教程、代码示例以及...
标题“effective-java.pdf”与描述“effective-java.pdf”表明本文档是关于Java编程实践的指南,且内容可能来自于一本名为《Effective Java》的书籍,该书是由Joshua Bloch编写,被广泛认为是Java编程的权威指南。...
9. **论文部分**:论文可能详细介绍了系统的架构设计、功能实现、性能评估以及对比分析,提供了对整个项目深入理解的理论支持。 10. **部署与维护**:系统部署可能涉及Tomcat、Jetty等JAVA应用服务器,以及版本控制...
在PPT中,这部分可能会详细介绍Java的历史、特点以及与C++和C#等其他语言的对比。 2. **环境配置**:学习Java首先需要配置Java Development Kit (JDK) 和集成开发环境(IDE),如Eclipse、IntelliJ IDEA或NetBeans。...
书中会对比分析两者,解释缓冲区、通道和选择器的使用。 7. **JDBC数据库访问**:Java Database Connectivity(JDBC)是Java访问数据库的标准接口,涵盖了数据库连接、SQL语句执行、结果集处理等内容,书中会详细...
1. **JavaFX**: Java Ribbon界面通常基于JavaFX框架构建,这是一个用于开发桌面和Web应用的现代Java GUI工具包。JavaFX提供了丰富的图形和媒体功能,以及对CSS样式的支持,使得创建美观的Ribbon界面变得容易。 2. *...