我正在用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的奇怪行爲是如何解釋的?
有什麼建議嗎?