Java Simon--性能瓶颈分析工具

有了AOP以及Java instrument之后,Java有很多很好的性能监控工具可以很有效的帮助我们分析系统瓶颈。例如使用jvisualvm的gui连接JVM应用之后可以监控应用的各种状态,可以看到每个函数的执行时间,不过很多时候我们没有jvisualvm的gui帮忙调试,这个时候我比较喜欢使用javasimon,可以通过AOP配置监控service layer方法调用时间,监控jdbc调用时间,还可以监控Web http request所需的时间,同时提供了web
dashboard,完美无缺。下面说说怎么在spring相关项目中使用Java Simon。

1. 在Web应用中加入Java Simon的包,如果是maven项目,通过加入如下dependenncy:

<span style="font-size:14px;">            <dependency>
                <groupId>org.javasimon</groupId>
                <artifactId>javasimon-spring</artifactId>
                <version>${<span style="font-family: Arial, Helvetica, sans-serif;">simon-version</span>}</version>
            </dependency>
            <dependency>
                <groupId>org.javasimon</groupId>
                <artifactId>javasimon-console-embed</artifactId>
                <version><span style="font-family: Arial, Helvetica, sans-serif;">${simon-version}</span></version>
            </dependency></span>

2. 在web.xml里面加入以下配置:

2.1 打开web dashboard,注意dashboard在simon-filter之前可以不用monitor web dashboard。

2.2 加入simon-filter监控所有web请求耗时

<span style="font-size:14px;"><web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
        <filter>
                <filter-name>simon-filter</filter-name>
                <filter-class>org.javasimon.javaee.SimonServletFilter</filter-class>
                <!-- optional -->
                <init-param>
                        <param-name>prefix</param-name>
                        <param-value>com.my.app.web</param-value>
                </init-param>
                <!-- optional basic plain-text console -->
                <init-param>
                        <param-name>console-path</param-name>
                        <param-value>/simon-filter</param-value>
                </init-param>
                <!-- optional, necessary when long requests should be reported -->
                <init-param>
                        <param-name>report-threshold-ms</param-name>
                        <param-value>1000</param-value>
                </init-param>
                <!-- optional, used by reporting mechanism - default implementation uses Manager.message
                        to log stuff, this goes to stdout, you can override it to report to file -->
                <init-param>
                        <param-name>request-reporter-class</param-name>
                        <param-value>org.javasimon.javaee.reqreporter.StandardRequestReporter</param-value>
                </init-param>
                <!-- optional, used to specify parameters for StopwatchSource instance -->
                <init-param>
                        <param-name>stopwatch-source-props</param-name>
                        <param-value>includeHttpMethodName=ALWAYS</param-value>
                </init-param>
                <!-- see Javadoc for org.javasimon.javaee.SimonServletFilter for more about available parameters -->
        </filter>

        <!-- this is related to optional Web Console (not the basic ones included in the filter above) - NOT NECESSARY
                for monitoring itself if you use different way how to get the results (JMX, own mechanism, ...) -->
        <filter>
                <filter-name>simon-console-filter</filter-name>
                <filter-class>org.javasimon.console.SimonConsoleFilter</filter-class>
                <init-param>
                        <param-name>url-prefix</param-name>
                        <param-value>/simon-console</param-value>
                </init-param>
        </filter>

        <!-- in case Console is used it is recommended to put it in front of the monitoring filter,
                so it is not monitored -->
        <filter-mapping>
                <filter-name>simon-console-filter</filter-name>
                <url-pattern>/*</url-pattern>
        </filter-mapping>

        <filter-mapping>
                <filter-name>simon-filter</filter-name>
                <url-pattern>/*</url-pattern>
        </filter-mapping>
</web-app></span>

3. 在spring application context xm文件中,通过aop的方式monitor所有spring初始化的bean

<span style="font-size:14px;"><bean id="monitoringInterceptor" class="org.javasimon.spring.MonitoringInterceptor" /></span>
<span style="font-size:14px;">  <aop:config>
        <aop:advisor advice-ref="monitoringInterceptor" pointcut="execution(public * com...service.*.*(..))" />
    </aop:config></span>

4. 启动应用,查看http://ip/app/simon-console就可以看到所有被监控service方法的执行时间还有web请求耗时,还可加入对jdbc的监控(通过包装jdbc driver或者jdbc datasource/connection。

时间: 2024-08-09 14:36:26

Java Simon--性能瓶颈分析工具的相关文章

Java静态代码分析工具Infer

Java静态代码分析工具Infer 作者:chszs,转载需注明.博客主页:http://blog.csdn.net/chszs 一.Infer介绍 Infer是Facebook最新开源的静态程序分析工具,用于在发布移动应用之前对代码进行分析,找出潜在的问题.目前Facebook使用此工具分析Facebook的App,包括Android.iOS.Facebook Messenger和Instagram等. Facebook称该工具帮助其每个月检查出应用潜在的数百个Bug,例如一些空指针访问.资源

常用 Java 静态代码分析工具的分析与比较

转载自: http://www.oschina.net/question/129540_23043 简介: 本文首先介绍了静态代码分析的基本概念及主要技术,随后分别介绍了现有 4 种主流 Java 静态代码分析工具 (Checkstyle,FindBugs,PMD,Jtest),最后从功能.特性等方面对它们进行分析和比较,希望能够帮助 Java 软件开发人员了解静态代码分析工具,并选择合适的工具应用到软件开发中. 引言 在 Java 软件开发过程中,开发团队往往要花费大量的时间和精力发现并修改代

Java线程Dump分析工具--jstack

jstack用于打印出给定的java进程ID或core file或远程调试服务的Java堆栈信息,如果是在64位机器上,需要指定选项"-J-d64",Windows的jstack使用方式只支持以下的这种方式:      jstack [-l][F] pid      如果java程序崩溃生成core文件,jstack工具可以用来获得core文件的java stack和native stack的信息,从而可以轻松地知道java程序是如何崩溃和在程序何处发生问题.另外,jstack工具还可

如何分析android的OOM,与java静态代码分析工具

用MAT分析OOM 很多OOM看似发生在bitmap 分配得时候,但它一般不是rootcause.根本原因都在于本应该自动释放的资源,因为代码的错误,而导致某些对象一直被引用(Reference),例如 Android 内存优化,如何避免OOM 文章中提到的Activity 的mContext 引用. 当代码量很庞大的时候,单靠读代码查找错误是很困难的,所以必须借助于工具,这里介绍一款很好用的分析工具MAT. 1.下载MAT http://www.eclipse.org/mat/download

Java class文件分析工具 -- Classpy

Classpy Classpy是一个图形化的class文件分析工具,功能和javap类似,界面主要参考了Java Class Viewer: 为什么要重新创造轮子? 写这个工具花了将近一周的时间,那么为什么要浪费时间重新发明一个轮子呢?主要是因为下面几点原因: 通过自己写一个class解析器,可以彻底理解class文件格式和字节码 尝鲜Java8和JavaFX 8 Java Class Viewer比较老,不支持新的class文件格式 可以结合javap和Java Class Viewer的优点

【转载】常用 Java 静态代码分析工具的分析与比较

摘自:http://www.oschina.net/question/129540_23043常用 Java 静态代码分析工具的分析与比较 简介: 本文首先介绍了静态代码分析的基本概念及主要技术,随后分别介绍了现有 4 种主流 Java 静态代码分析工具 (Checkstyle,FindBugs,PMD,Jtest),最后从功能.特性等方面对它们进行分析和比较,希望能够帮助 Java 软件开发人员了解静态代码分析工具,并选择合适的工具应用到软件开发中. 引言 在 Java 软件开发过程中,开发团

java内存溢出分析工具

http://www.cnblogs.com/preftest/archive/2011/12/08/2281322.html java内存溢出分析工具:jmap使用实战 在一次解决系统tomcat老是内存撑到头,然后崩溃的问题时,使用到了jmap. 1 使用命令 在环境是linux+jdk1.5以上,这个工具是自带的,路径在JDK_HOME/bin/下 jmap -histo pid>a.log 2 输出结果摘要 Size Count Class description -----------

[转载] 常用 Java 静态代码分析工具的分析与比较

转载自http://www.oschina.net/question/129540_23043 简介: 本文首先介绍了静态代码分析的基本概念及主要技术,随后分别介绍了现有 4 种主流 Java 静态代码分析工具 (Checkstyle,FindBugs,PMD,Jtest),最后从功能.特性等方面对它们进行分析和比较,希望能够帮助 Java 软件开发人员了解静态代码分析工具,并选择合适的工具应用到软件开发中. 引言 在 Java 软件开发过程中,开发团队往往要花费大量的时间和精力发现并修改代码缺

Java开源运行分析工具(转)

FProfiler FProfiler是一个非常快的Java profiler.它利用BCEL和log4j来记录每个方法从开始到结尾的日记.FProfiler可以用来在你的应用程序,Servlet,Applet...中找出hotspots. 更多FProfiler信息 JRat JRat是一个Java Runtime分析工具包.它的目的是让开发者更好的明白Java程序动行时的状态.JRat包括但并不只局限于性能剖析. 更多JRat信息 EJP EJP(Extensible Java Profil

Java静态代码分析工具——FindBugs插件的安装与使用

1 什么是FindBugs FindBugs 是一个静态分析工具,它检查类或者 JAR 文件,将字节码与一组缺陷模式进行对比以发现可能的问题.有了静态分析工具,就可以在不实际运行程序的情况对软件进行分析.不是通过分析类文件的形式或结构来确定程序的意图,而是通常使用 Visitor 模式来鉴别代码是否符合一些固定的规范. 2 如何安装FindBugs? 作为Eclipse的一个插件,可以将Findbugs集成到Eclipse中使用. 第一种是在线安装:在Eclipse的插件安装地址中输入http: