3

我正在使用 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 M。硬盘驱动器上有足够的可用空间。我在 Ubuntu 12.04 x64 上运行测试。中的文件大小/etc/security/limits.conf没有限制(据我了解,默认情况下,此操作系统中的文件大小没有限制)。

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

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

ConsoleAppender 和 FileAppender 的奇怪行为如何解释?
有什么建议么?

4

1 回答 1

0

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

安装目录/bin/jmeter.log

你可能一直在做一些只是抽出错误的事情。

于 2013-06-02T20:40:11.043 回答