【发布时间】:2014-06-13 09:12:30
【问题描述】:
我正在尝试对将运行大约 4,000,000 个条目并严重依赖记录每个条目的实用程序进行压力测试。我正在使用 Log4J 使用 RollingFileAppender 将我的条目记录到磁盘上。
我解决这个问题的方法是创建线程,每个线程包含 2,000 个条目。这相当于大约 200 个线程。
启动器如下:
public static int COUNT = 0;
public static void main(String args[]) throws IOException {
final Logger logger = Logger.getLogger("Sift Science Bulk");
final ExecutorService executor = Executors.newFixedThreadPool(200);
for (int i=0; i<200; i++) {
final Runnable uploader = new Runnable() {
@Override
public void run() {
for (int j=0; j<2000; j++) {
synchronized (logger) {
logger.info("test");
COUNT++;
}
}
}
};
executor.execute(uploader);
}
executor.shutdown(); // Wait until all threads are finished. Just don't accept new threads.
while (!executor.isTerminated()) { /*JUST ITERATE INDEFINITELY*/ }
System.out.println(COUNT);
}
最后的结果有点奇怪……
-
System.out.println将按预期打印 4,000,000,但是 - log4j 生成的文件将只有 ~200,000 行!
我错过了什么?谢谢大家。
【问题讨论】:
-
请发布您的 Log4j 配置。