Web應用測試監控執行時間 -- JavaSimon
阿新 • • 發佈:2019-02-09
在系統性能調優時以前介紹過使用jmeter-plugins和VisualVM監控系統的總體效能,有時候要找出瓶頸便需要了解某些具體方法呼叫消耗的時間。VisualVm可以做到,不過如果做profiler就太耗資源了。個人覺得JavaSimon是一個很不錯的選擇。不僅可以方便的監控資料層,業務層,Web層的各自訪問時間,還提供了Web頁面檢視統計資料和系統告警通知功能,非常不錯。
描述一下基於Spring的Web系統中如何使用JavaSimon。
1. Web.xml 開啟Web層統計,Web頁面檢視以及如何通知告警
<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>
2. Spring配置檔案
注意這裡只對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>
3. JDBC 層
直接使用simon的jdbc driver替代官方driver,或者包裝datasource就可以達到目的。
可以在Web應用中檢視不同層訪問時間來定位系統瓶頸了。