如何使用微软PerfView配置程序性能数据

如何使用微软PerfView配置程序性能数据,第1张

本系列文章分两部分,本文是第二部分(第一部分参见:你的数据有多干净?)。我们将以测试体验的方式了解微软SQL Server提供的数据分析工具

其它一些外部分析工具具有更丰富的功能,但是SQL Server授权允许你免费就可以使用这款低调的分析工具。

接下来让我们通过分析“AdventureWorksLT ”数据库中的一些数据来了解这款工具。

在此之前,你需要先安装好SQL Server集成服务,以及与SQL Server捆绑的Visual Studio精简版。在SQL Server 2012中,叫做“SQL Server Data Tools”而在SQL Server 2008中,名称叫做“Business Intelligence Development Studio”。

如果你缺少滑丛这些组件,你可以运行SQL Server安装程序并勾选相关组件, *** 作很简单。

配置分析工具

不管你启动哪个Visual Studio工作环境,都要创建一个集成服务项目。然后,从SSIS工具箱中拖拽一个数据分析任务到设计面板上,然后双击开始配置。

配置结果信息存储在XML文件中,所以需要指定保存文件的名称和路径。

点击目标旁边的空白框,会出现一个箭头。

点击箭头,然后点击“New File connection”。

在结果框中,指定路径和文件名(包括.xml后缀)。

点击“确定”按钮,然后点击“Quick Profile”按钮。

点击“ADO.NET Connection”旁边的“新建”按钮。

在出现的对话框中,指定SQL Server和托管待分析数据的数据库(我使用的是“AdventureWorksLT2012 ”数据库),然后点击“确定”按钮。

点击表或视图下拉框,选择待分析数据(我选用的是“SalesLT.Product”)。

保留默认勾选的复选框,然后点击“确定”按钮。确定后就会回到主设计界面。

最后,按“F5”就可以开始分析了。

分析成功,在SQL Server 2008中会有一个绿色小框来显示,在SQL Server 2012中是个绿色小勾。如果你看到红色小框或者红叉,那么可以在“Progress ”标签页找到哪里出错了。

查看结果

假设你看到的是绿色(在集成服务中每个人都喜欢这个颜色),那么接下来启动“Data Profile Viewer”应用程序。在开始菜单中,它在“Microsoft SQL Server XXXX”文件夹的集成服务子文件夹下。

在查看器中,点击“打开”按钮,找到你之前配置的xml文件。你现在可以看到分析结果了。

“adventureWorks”库中的数据本来是干干净净的信迅樱,所以我做了一些修改,你自己直接做的话看到的分析结果会不一样。

在查看器左侧面板中,你可以看到我们选择的表,它下面是数据分析的五个不同方面(也就是我们配置任务时默认选中的五项)。

点击“Candidate Key Profiles ”,就会在右侧面板中显示结果。

该信息展示了值的唯一性,你可以看看我的数据(修改过的),“名称”列包含的数据不是百分之百唯一的。

我可以点击“名称”列来查看更多,界面中“ Key Violations ”部分下面会显示更多信息。

错误的产品是“HL Road Frame – Black, 58”,问题是有两行有相同的名称(产品名称通常应该是唯一的)。

在“ Key Violations ”中的问题产品上点击,就会显示出需要关注的行。

在左侧面板中(+微信关注网络世界),点击“Column Length Distribution Profiles”。

功能正如其名昌歼,这个页面会分析每个列值的长度。

我这里显示的结果,“颜色”列包含列最小长度是2。

就像我们前面例子中所做的那样,我们可以向下钻取,我可以看到那些值的分布,进一步钻取我可以看到脏数据对应的实际行。

其它类型的分析 *** 作都是类似的。

“Column NULL Ratio Profiles”显示了某一列中“NULL”值的百分比。

如果你有些列实际上不允许为“NULL”,例如“Product Name”,那么这个功能就非常有用。

“Column Statistics Profiles ”显示了日期和数值的最小值、最大值、平均值以及标准偏差。对于识别“327岁的员工”与“价格为负数的产品”这类不合理数据非常有帮助。

“Column Value Distribution Profiles ”显示某一列中有多少不同的值。这对于处理像“性别”这种列是很有用的,你可能预期该列只有两个不同值,但是却找到了15个,很容易发现问题。

还有另外两个分析功能也是可用的,不过默认没有启用。

其中一个就是“Functional Dependency Profile ”,它可以找到那些依赖于其它列值得列。

这一条功能对于检查地址信息时很有用例如,我们希望相同城市的地址共用相同的邮政编码。

总结

该分析工具的局限性在于,源数据必须存储在SQL Server数据库中。例如,如果你希望分析存储在平面文件中的数据,那么你必须先把数据导入到SQL Server数据库中。

此外,该分析工具不支持创建额外的定制分析功能实现扩展。你看到的所有功能就是它能提供的所有功能。

局限性且放一旁,SQL Server附带提供的这款工具为那些希望得到并能快速运行数据分析的人提供了很好的起点。

微陆尺告信小程序,调试的时候,一打开总有个,黑框性能数据显示着,怎么关闭?

这是我们设置的结果,也就是我们设置了,在调试时打开早明了这一窗口。

点击小程序 右上角图标困配, 选择关闭性能数据即可

(需要注意的是,设置完毕后,提示“必须将小程序重新启动”。这里是指:将微信的进程关闭后重启。)

在实际部署的生产环境能够以较低的风险及成本实现对业务逻辑级别性能问题的追踪。本文将介绍如何集成 Perf4j 到 Java 应用程序中并生成性能数据。

系统日志是应用程序问题诊断及运行维护的重要工具。Logback、Log4j 是常用于 Java 平台的日志记录 API. 目前大部分产品只是将系统重要参数、状态的变化及异常信息通过日志输出。本文将要介绍的 Perf4j 是一款专

门用于 Java 服务器端代码计让型时、记录日志和监控结果的开源工具包。Perf4j

对常用日志工具包进行了扩展,能够将得到的原始性能数据进行统计并发布到可定制的输出源,如控制台、日志文件、JMX 等。Perf4j

提供了多种方式与 Java 代码集成,开发和系统维人员能够灵活地将 Perf4j 的 API 嵌入到各种不同架构的应用程序中。

Perf4j 目前依托于开源项目协作平台 Codehaus 进行文档及代码管理,下一步该项目计划迁移到 Github

平台,以便更多的社区及开发人员可以参与到开发及维护中来。Perf4j 欢迎使用者提出新的功能需求并且鼓励将定制或扩展的代码贡献到 Perf4j

源码中。本文中示例代码使用的 Perf4j 版本是 0.9.16,读者需在下载类包或配置 Maven 时留意。

阅读文章之前,您要对 Java 注解、JMX、面向方面编程有一些了解。特别是 JConsole 的使用及 Spring AOP 的配置方式要较为熟悉。

文章首先阐明在何种应用场景下应优先考虑使用 Perf4j。然后是具体讲解 Pef4j 与应用程序的集成方式。最后会介绍如何将收集的数据生成便于分析的可视化图表。

应用场景

在 Java 平台上遇到性能问题时,如 CPU 占用过高、系统响应缓慢,通常的分析方法是使用 JVM

剖析工具在系统瓶颈临界点前一段时间抓取 CPU 占用分布,再对 CPU 占用率最高的几个方法排查。Perf4j

的优势在于能够持续跟踪统计所关注功能代码的执行效率,对于前后两个版本出现较大差异的方法进行深入分析,可以在开发周期中尽早发现问题。Perf4j 还可以用在产品环境中,从运营的早期开始,将其统计的数据做为系统的性能和健康指标长期监测。

首选 Perf4j 的应用场景:

Java 本地代码调用(JNI) 分布式系统、集群部署 面向服务体系结构(SOA) 远程方法调用(RMI)

开发人员必须将本地方法、远程方法及 Web services 的性能问题隔离出来,以防干扰对 Java 应用程序本身的分析。通过日志记录则是最简单的方式;采用分布式架构或集群部署的系统相对复杂,不同的网络环境、基础硬件和 *** 作系统的差异、虚拟主机中资源与配置的差异等造成很难采用统一的工具来监测代码级别的性能指标。而日志记录则可以轻松加入到各种程序中,且是资源与时间成本最低的方式。Perf4j 提供了 CSV 格式的转换工具,开发人员可以借助第三方工具方便地将统计结果汇总分析。

集成到应用程序

下面将分两种方式具体讲述如何利用 Per4j 提供的 API。在实际的项目中,应根据现有的程洞源序框架及监测目的灵活选择。另外,针对 WebSphere 应用服务器的自有日志系统,还必须采取额外的措施来确保 Perf4j 的正常工作。

对代码段计时

Perf4j 中 org.perf4j.StopWatch 是整个 API 中的基础工具。这是一个封装良好的计时器。可以把

StopWatch 嵌入到代码中任何地方。这种方式往往使得复杂的方法得到分纳滑态解,从而有利于精确定位问题的根源。以下通过清单 1 和清单 2

来介绍其具体用法。

清单 1.StopWacth 基本用法

public static void basicStopWatch() throws

InterruptedException{ // 创建 StopWacth 时开始计时,之后也可以用 stopWatch.start()

重新设定计时开始时间点 StopWatch stopWatch = new StopWatch("TransactionA")//

执行需要计时的代码 Thread.sleep(2 * 1000L)String result = stopWatch.stop()

System.out.print(result)}

清单 1 中最后输出的结果示例:start[1340442785756] time[1995]

tag[TransactionA]。在构造函数中设定 tag[TransactionA]

用来区分不同的业务逻辑,可以把它看成是性能分析中的事务(Transaction)。

如果需要将多段代码分开统计,可采用 LoggingStopWatch 类的 lap() 方法定义多个事务。

清单 2.LoggingStopWatch 用法

public static void loggingStopWacth()

throws InterruptedException{ LoggingStopWatch stopWatch = new

LoggingStopWatch()// 设定阈值,小于此阈值的结果将不会被记录下来

stopWatch.setTimeThreshold(1*1000L)Thread.sleep(2 * 1000L)//

停止当前计时,开始新的起始时间点 stopWatch.lap("TransactionB")Thread.sleep(500L)

stopWatch.stop("TransactionC")}

清单 2 中使用了 LoggingStopWatch 类,其 stop() 方法只是将执行时间数据通过

System.err.println() 输出。若与 Log4j 框架集成,则需要使用 LoggingStopWatch 的子类

Log4JStopWatch, 目前 Perf4j 还支持 Apache Commons

Logging、java.util.logginLogback,对应使用 CommonsLogStopWatch、

JavaLogStopWatch、Slf4JStopWatch。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12221993.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-21
下一篇 2023-05-21

发表评论

登录后才能评论

评论列表(0条)

保存