繁体   English   中英

您是否使用过Perf4J来收集和分析Java应用程序中的性能指标? [关闭]

[英]Have you used Perf4J to collect and analyze performance metrics in Java app? [closed]

是否在Java应用程序中使用Perf4J来收集和分析性能统计信息?

典型模式是什么(使用日志文件,实用程序,UI,JMX等)?

您是否使用了注释和基于AOP的功能?

你有没有使用任何JMX集成?

你是如何处理生产配置的?

您是否将效果统计信息视图/报告作为应用中的功能包含在内?

请告诉您是否以及为何选择了替代图书馆/方法。

我使用Per4j来监控Web服务端点性能以及内部服务和dao类性能。

我主要只是将原始性能统计信息记录到每日滚动文件中。 然后我在命令行上使用jar来分析具有不同时间片的数据。 我经常使用-g命令行选项输出一个html文件,然后我可以打开它并直观地查看数据,这非常有用。

我喜欢使用带有@Profiled注释的Spring AOP。 它使时间非常干净。 我有一些关于perf4j降级性能的怀疑者,我可以轻松地提出我可以通过从Spring applicationContext.xml文件中删除TimingAspect来关闭日志记录。

<!-- just remove and all uses of @Profiled do nothing -->
<bean id="timingAspect" class="org.perf4j.log4j.aop.TimingAspect"/>

关注平均值并注意最大值。 在进行性能调整时,我们进行了一个方法调用,其中包含具有较大标准偏差的Wild值。 大多数值都在中位数附近,但有一些电话比平均值高出100倍。 比任何事情都更多的用户错误,但要小心。

我使用AsyncCoalescingStatisticsAppender ,时间片为15000,但很难读取日志。 因为我有原始的性能日志,所以我可以通过在命令行上运行perf4j来进行切换和更改。

我尝试了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应用程序?

我已经使用了Perf4J,最终因为我已经在使用Spring AOP而放弃了它。 我很乐意简单地整合两者,但是遇到了麻烦(因为Perf4J appenders)。

我尝试通过注释和没有JMX的AOP使用Perf4j。 您可以通过配置文件处理生产cfg。

总的来说,我喜欢Perf4j方法,但由于我已经使用Spring进行性能监控,所以我不需要perf4j。 Perf4j免费提供的一件事是最小/最大/标准开发; 与其他libs你必须自己做数学。

如果你没有任何其他可以提供拦截的lib(aspectJ或AOP),我的东西perf4j很好,但是因为我已经有了spring,所以实现性能测量更容易。 您可以使用Spring通过JMX轻松公开bean属性。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM