2013-04-24 90 views
2

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

  • 当线程组中的线程数量相对较少(小于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,并将日志文件大小的限制设置为2 M.在这种情况下,日志记录过程正确执行。

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

回答

0

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

找到安装目录/斌/ jmeter.log

你可能一直在做的东西,刚刚抽不出来的错误。