获得技术资料内容,请访问Greenplum中文社区网站
在开发甚至是生产过程中,我们的程序可能会满足不了预想中的性能要求。这种情况下我们就需要分析程序中的性能瓶颈,并针对性地解决问题。性能瓶颈的定位不仅可以在开发过程中帮助我们确定程序需要被优化的部分,亦可在性能调优过程中为参数的确定提供参考信息。
在分析性能瓶颈的过程中,除了需要进行代码分析以外,还常常需要进行profiling。Profiling是指通过收集程序运行时的信息来动态分析程序行为的方法。相比于代码分析,profiling能够利用对CPU/内存使用率、文件读写次数、各个函数的运行时间等信息更直观高效地定位性能瓶颈。
GPText是Pivotal Greenplum生态系统的一部分。它无缝集成了Greenplum数据库海量数据并行处理以及Apache Solr企业级文本检索的能力,为用户提供了一套易于使用、功能完备的文本检索、分析方案。在GPText开发过程中,我们难免需要对SolrCloud进行调优测试,以此提高GPText的性能。笔者前段时间曾使用JFR(Java Flight Recorder)和JMC(Java Mission Control)工具对SolrCloud集群进行profiling,通过分析运行时信息、定位并解决性能瓶颈,最终使得该SolrCloud集群的响应速度成倍提高。
JFR和JMC工具简介
JFR(Java Flight Recorder,飞行记录器)是Oracle的JDK自带的profiling工具,通过该工具,我们可以收集Java虚拟机的一些运行时的信息,如CPU和内存使用率,热点方法(Hot Methods)等。
JMC(Java Mission Control)是Oacle的JDK自带的可视化工具,能够在图形界面中显示、统计JFR收集的程序运行时信息,帮助我们更直观地理解和分析JVM和Java应用程序的运行过程。
通过JFR和JMC的搭配,我们可以简单直观地对测试环境甚至是生产环境进行运行时信息的收集和分析,以此定位Java程序的瓶颈。相比于其它的Java Profiling工具,如JProfiler、YourKit Profiler、Retrace、CodePro Profiler等,JFR和JMC的搭配同时具有以下优势:
1. 支持离线模式。离线模式指的是将profiling的结果保存到文件中,之后再根据文件的内容进行分析。测试、生产环境有时不能接入互联网,甚至无法通过普通方式同本地客户端进行连接。这种情况下,我们只能先把profiling的结果保存到本机文件中,再把这些文件复制到本地环境进行分析。离线模式的支持在对有些环境的profiling中是必不可少的。
2. 支持收集的信息全面。JFR支持但不限于以下信息的收集:
-
机器的CPU使用信息、Java程序CPU使用信息
-
机器的内存使用信息、Java程序的内存使用信息
-
垃圾回收相关信息
-
载入类信息
-
线程信息,包括线程睡眠、阻塞等状态的信息
-
I/O信息
-
方法调用信息
3. 在非生产服务器下的使用免费。(官方文档:The Java Flight Recorder (JFR) is a commercial feature. You can use it for free on developer desktops or laptops, and for evaluation purposes in test, development, and production environments. However, to enable JFR on a pro