您是否使用Perf4J来收集和分析Java应用程序中的性能指标?[已关闭]
您是否在 Java 应用程序中使用 Perf4J 来收集和分析性能统计信息?
典型的模式是什么(使用日志文件,实用程序,UI,JMX等)?
您是否使用了批注和基于 AOP 的功能?
您是否使用过任何 JMX 集成?
您是如何处理生产配置的?
您是否在应用程序中将性能统计信息视图/报告作为一项功能包含在应用程序中?
请告诉您是否以及为什么决定使用替代库/方法。
您是否在 Java 应用程序中使用 Perf4J 来收集和分析性能统计信息?
典型的模式是什么(使用日志文件,实用程序,UI,JMX等)?
您是否使用了批注和基于 AOP 的功能?
您是否使用过任何 JMX 集成?
您是如何处理生产配置的?
您是否在应用程序中将性能统计信息视图/报告作为一项功能包含在应用程序中?
请告诉您是否以及为什么决定使用替代库/方法。
我正在使用Per4j来监视Web服务端点性能以及内部服务和dao类性能。
我主要只是将原始性能统计信息记录到每日滚动文件中。然后,我使用命令行上的jar来分析具有不同时间片的数据。我经常使用命令行选项输出一个html文件,然后我可以打开该文件并直观地查看数据,这非常有用。-g
我喜欢使用Spring AOP和注释。它使时间非常干净。我对perf4j性能下降有一些怀疑,我可以很容易地提出,我可以通过从我的Spring应用程序Context中删除来关闭日志记录.xml文件。@Profiled
TimingAspect
<!-- just remove and all uses of @Profiled do nothing -->
<bean id="timingAspect" class="org.perf4j.log4j.aop.TimingAspect"/>
注意平均值并注意最大值。在执行性能调优时,我们有一个方法调用,其中包含具有较大标准差的野生值。大多数值都在中位数附近,但是有一些呼叫比平均值多100倍。用户错误比什么都多,但要小心。
我使用的时间线为15000,但几乎不读取日志。因为我有原始性能日志,所以我可以通过在命令行上运行perf4j来切碎和更改它。AsyncCoalescingStatisticsAppender
我尝试了JMX集成,它的工作原理与文档中的承诺一样。但我目前对它没有真正的用处。
我计划使用SNMP公开数据,如果它有用,我会做出贡献。
总之,我推荐Perf4j。
我在客户端- 服务器应用程序中使用Perf4J进行RPC调用计时。它实现起来非常简单:我只需要在 RPC 调度程序 servlet 周围包含几行代码来测量每个 RPC 方法调用。时间测量值被写入一个单独的日志文件,聚合的数据被保存在内存中,以便与图形化servlet一起使用。配置只需几分钟。
这是preHandle()方法的摘录:
request.setAttribute("stopWatch", new CommonsLogStopWatch());
此代码来自 postHandle() 方法:
LoggingStopWatch stopWatch = (LoggingStopWatch)request.getAttribute("stopWatch");
stopWatch.stop(methodName);
以下是我的log4j.cfg的相关部分:
<logger name="org.perf4j.TimingLogger" additivity="false">
<level value="info"/>
<appender-ref ref="CoalescingStatistics"/>
<appender-ref ref="statsAppender"/>
</logger>
<appender name="CoalescingStatistics"
class="org.perf4j.log4j.AsyncCoalescingStatisticsAppender">
<param name="TimeSlice" value="60000"/>
<appender-ref ref="graphPatientChart"/>
</appender>
<appender name="graphPatientChart"
class="org.perf4j.log4j.GraphingStatisticsAppender">
<param name="GraphType" value="Mean"/>
<param name="TagNamesToGraph" value="getPatientChart,idleNotification"/>
</appender>
<appender name="statsAppender" class="org.apache.log4j.DailyRollingFileAppender">
<param name="datePattern" value="'.'yyyy-MM-dd"/>
<param name="file" value="WEB-INF/log/meona-performance.log"/>
<param name="append" value="true"/>
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%m%n"/>
</layout>
</appender>
我希望图形 servlet 更具交互性:如果我能选择要包含在图表中的标签,那就太好了。您是否遇到过可用于分析时间测量日志的 UI 应用程序?