performance-testingperf4j

perf4j provide wrong Count parameter


I use perf4j in a a multi thread request processor application with high request rate that is deployed on jboss app server.
I use it with log4j and AsyncCoalescingStatisticsAppender for providing run-time statistics data. this is partial log4j.xml file:

<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>

MY problem is that the Count parameter in result, is not equal to exact no of requests. for example in a test, I send 10000 request, but Count parameter that is written to log file is 9560.
Is there any guide?


Solution

  • I found the answer. The problem was queueSize of AsyncCoalescingStatisticsAppender. Because high rate of requests in my app, the queue capacity was insufficient. We can set queue size in log4j.xml as the following:

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