0

我在部署在 jboss 应用服务器上的具有高请求率的多线程请求处理器应用程序中使用 perf4j。
我将它与 log4j 和 AsyncCoalescingStatisticsAppender 一起使用,以提供运行时统计数据。这是部分 log4j.xml 文件:

<appender name="timeFileAppender" class="org.apache.log4j.RollingFileAppender">
    <param name="file" value="C:\\JavaEE\\JCATestLog\\TimeInfo.log"/>
    <param   name = "MaxFileSize"    value = "15000KB"/>
    <param   name = "MaxBackupIndex" value = "10" />
    <param name="Append" value="true"/>
    <layout class="org.apache.log4j.PatternLayout">
        <param name="ConversionPattern" value="%d{yyyy-MM-dd HH:mm:ss.SSS} %-5p %c{1}:%L - %m%n"/>
    </layout>
</appender>

<appender name="CoalescingStatistics"
          class="org.perf4j.log4j.AsyncCoalescingStatisticsAppender">
    <param name="TimeSlice" value="10000"/>
    <appender-ref ref="timeFileAppender"/>
</appender>

<logger name="org.perf4j.TimingLogger" additivity="false">
    <level value="INFO"/>
    <appender-ref ref="CoalescingStatistics"/>
</logger>

我的问题是结果中的 Count 参数不等于确切的请求数。例如在一个测试中,我发送了 10000 个请求,但是写入日志文件的 Count 参数是 9560。
有什么指南吗?

4

1 回答 1

0

我找到了答案。问题是 AsyncCoalescingStatisticsAppender 的 queueSize。由于我的应用程序中的请求率很高,队列容量不足。我们可以在 log4j.xml 中设置队列大小,如下所示:

<appender name="CoalescingStatistics"
          class="org.perf4j.log4j.AsyncCoalescingStatisticsAppender">
    <param name="TimeSlice" value="10000"/>
    <param name="QueueSize" value="100000"/>
    <appender-ref ref="timeFileAppender"/>
</appender>
于 2013-07-28T07:38:06.857 回答