Java JMeter负载测试期间无法解释的日志记录问题

Java JMeter负载测试期间无法解释的日志记录问题,java,log4j,jmeter,Java,Log4j,Jmeter,我正在使用JMeter执行媒体服务器的负载测试。我已经编写了自定义采样器,它扩展了AbstractJavaSamplerClient。对于日志记录,我使用log4j(只使用一个rootCategory appender) 当线程组中的线程数相对较少(少于800)时,所有线程都可以正常工作 当线程组中的线程数相对较大(大于1400)时,会出现一些无法解释的日志记录问题 可以考虑两种情况。在第一种情况下,使用了ConsoleAppender,在第二种情况下使用了FileAppender 在第一

我正在使用JMeter执行媒体服务器的负载测试。我已经编写了自定义采样器,它扩展了
AbstractJavaSamplerClient
。对于日志记录,我使用log4j(只使用一个rootCategory appender)

  • 当线程组中的线程数相对较少(少于800)时,所有线程都可以正常工作
  • 当线程组中的线程数相对较大(大于1400)时,会出现一些无法解释的日志记录问题
可以考虑两种情况。在第一种情况下,使用了
ConsoleAppender
,在第二种情况下使用了
FileAppender

  • 在第一种情况下,日志文件突然终止。然而,测试计划执行成功,JMeter日志(JMeter.log)也可以正常终止。没有抛出异常

  • 在第二种情况下,日志文件也突然终止,但原因是可以理解的:

    log4j:ERROR Failed to flush writer,java.io.IOException: File too large
        at java.io.FileOutputStream.writeBytes(Native Method)
        at java.io.FileOutputStream.write(FileOutputStream.java:318)
        at sun.nio.cs.StreamEncoder.writeBytes(StreamEncoder.java:221)
        at sun.nio.cs.StreamEncoder.implFlushBuffer(StreamEncoder.java:291)
        at sun.nio.cs.StreamEncoder.implFlush(StreamEncoder.java:295)
        at sun.nio.cs.StreamEncoder.flush(StreamEncoder.java:141)
        at java.io.OutputStreamWriter.flush(OutputStreamWriter.java:229)
        at org.apache.log4j.helpers.QuietWriter.flush(QuietWriter.java:59)
        at org.apache.log4j.WriterAppender.subAppend(WriterAppender.java:324)
        at org.apache.log4j.WriterAppender.append(WriterAppender.java:162)
        at org.apache.log4j.AppenderSkeleton.doAppend(AppenderSkeleton.java:251)
        at org.apache.log4j.helpers.AppenderAttachableImpl.appendLoopOnAppenders(AppenderAttachableImpl.java:66)
        at org.apache.log4j.Category.callAppenders(Category.java:206)
        at org.apache.log4j.Category.forcedLog(Category.java:391)
        at org.apache.log4j.Category.debug(Category.java:260)
        at com.nsacdn.common.AbstractHTTPDownloader.downloadChunk(Unknown Source)
        at com.nsacdn.common.AbstractHTTPDownloader.downloadAllChunks(Unknown Source)
        at com.nsacdn.hls.HlsDownloader.download(Unknown Source)
        at com.nsacdn.common.DownloadSampler.runTest(Unknown Source)
        at org.apache.jmeter.protocol.java.sampler.JavaSampler.sample(JavaSampler.java:191)
        at org.apache.jmeter.threads.JMeterThread.process_sampler(JMeterThread.java:428)
        at org.apache.jmeter.threads.JMeterThread.run(JMeterThread.java:256)
        at java.lang.Thread.run(Thread.java:722)
    
然而,日志文件的大小非常小-小于10米。硬盘上有足够的可用空间。我正在Ubuntu 12.04 x64上运行测试。
/etc/security/limits.conf
中没有文件大小限制(据我所知,默认情况下,此操作系统中没有文件大小限制)

我试图模拟日志记录过程。我已经编写了一个简单的应用程序,它创建了2000个并行线程,使用相同的log4j配置在日志中总共写入了大约70m。此应用程序在目标计算机上运行良好

最后,我将
FileAppender
替换为
RollingFileAppender
,并将日志文件大小限制为2m。在这种情况下,正确执行日志记录过程

如何解释ConsoleAppender和FileAppender的奇怪行为?

有什么建议吗?

我会检查JMeter应用程序本身的日志文件。JMeter具有用于记录信息(来自监听器)的日志文件,JMeter具有用于记录来自应用程序的信息的文件。在2.9版中,可以在

安装目录/bin/jmeter.log

您可能做了一些只是输出错误的事情