在系统性能调优时以前介绍过使用jmeter-plugins和VisualVM监控系统的总体性能,有时候要找出瓶颈便需要了解某些具体方法调用消耗的时间。VisualVm可以做到,不过如果做profiler就太耗资源了。个人觉得JavaSimon是一个很不错的选择。不仅可以方便的监控数据层,业务层,Web层的各自访问时间,还提供了Web页面查看统计数据和系统告警通知功能,非常不错。
描述一下基于Spring的Web系统中如何使用JavaSimon。
<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>
<!-- simon统计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.cloud.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, 需要报告的阀值 -->
<init-param>
<param-name>report-threshold-ms</param-name>
<param-value>1000</param-value>
</init-param>
<!-- optional, 告警 - 显示到标准输出,可以自己定制报告 -->
<init-param>
<param-name>request-reporter-class</param-name>
<param-value>org.javasimon.javaee.reqreporter.StandardRequestReporter</param-value>
</init-param>
<!-- optional, StopwatchSource instance -->
<init-param>
<param-name>stopwatch-source-props</param-name>
<param-value>includeHttpMethodName=ALWAYS</param-value>
</init-param>
</filter>
<!-- Web Console 显示Web统计信息,访问/simon-console 查看-->
<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>
<!-- 大部分情况web查看console不是需要监控的,注意filter顺序 -->
<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>
注意这里只对Spring配置文件中定义的bean有效(spring-mvc中controller无效)
<bean id="monitoringInterceptor" class="org.javasimon.spring.MonitoringInterceptor"/>
<aop:config>
<!-- name of the class or interface -->
<aop:pointcut id="monitoringPointcut" expression="execution(* com.cloud.service.ServiceImpl.*(..))"/>
<aop:advisor advice-ref="monitoringInterceptor" pointcut-ref="monitoringPointcut"/>
</aop:config>
直接使用simon的jdbc driver替代官方driver,或者包装datasource就可以达到目的。
可以在Web应用中查看不同层访问时间来定位系统瓶颈了。
原文地址:http://blog.csdn.net/cloud_ll/article/details/43603241