我在一个多线程请求处理器应用程序中使用perf4j,该应用程序具有高请求率,部署在jboss app服务器上。
我将它与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 有指导吗?
答案 0 :(得分: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>