SPF4J Java Profiler 如何将缓冲的指标写入文件?
How does the SPF4J Java Profiler write buffered metrics to files?
我使用 SPF4J(Java 的简单分析器框架)MeasurementRecorder 编写了一个简单的测试来捕获计时指标。我正在 运行 设置一个简单的 for 循环并捕获 100-200 毫秒的随机睡眠时间,如下面的完整代码示例所示。
当我 运行 测试时,时间序列数据库 (TSDB) 文件已成功创建,但在测试 运行ning(大约 2 分钟)时它们是空的。缓冲数据在应用程序完成时写入文件,但末尾的样本丢失并且最后一个被 t运行 处理,就像缓冲区没有正确刷新一样。
如果应用程序永不终止(例如 Web 服务),缓冲的指标何时写入文件 - 在计时器上,或者缓冲一定数量的数据时?这是可配置的吗?如果是,如何配置?
package com.examples.spf4j;
import org.spf4j.perf.MeasurementRecorder;
import org.spf4j.perf.impl.RecorderFactory;
import java.io.File;
import java.util.Random;
import org.junit.Test;
public class TestMeasurementRecorder {
@Test
public void testMeasurementRecorder() throws InterruptedException {
initialize();
MeasurementRecorder measurementRecorder = getMeasurementRecorder();
Random random = new Random();
for (int i=0; i<=1000; i++) {
long startTime = System.currentTimeMillis();
Thread.sleep(100 + random.nextInt(100));
measurementRecorder.record(System.currentTimeMillis() - startTime);
}
}
public static void initialize() {
String tsDbFile = System.getProperty("user.dir") + File.separator + "spf4j-performance-monitor.tsdb2";
String tsTextFile = System.getProperty("user.dir") + File.separator + "spf4j-performance-monitor.txt";
System.setProperty("spf4j.perf.ms.config", "TSDB@" + tsDbFile + "," + "TSDB_TXT@" + tsTextFile);
}
public static MeasurementRecorder getMeasurementRecorder() {
int sampleTimeMillis = 1000;
return RecorderFactory.createScalableQuantizedRecorder("response time", "ms", sampleTimeMillis, 10, 0, 40, 10);
}
}
您需要设置系统 属性: spf4j.perf.ms.periodicFlush=true
启用定期刷新。
我使用 SPF4J(Java 的简单分析器框架)MeasurementRecorder 编写了一个简单的测试来捕获计时指标。我正在 运行 设置一个简单的 for 循环并捕获 100-200 毫秒的随机睡眠时间,如下面的完整代码示例所示。
当我 运行 测试时,时间序列数据库 (TSDB) 文件已成功创建,但在测试 运行ning(大约 2 分钟)时它们是空的。缓冲数据在应用程序完成时写入文件,但末尾的样本丢失并且最后一个被 t运行 处理,就像缓冲区没有正确刷新一样。
如果应用程序永不终止(例如 Web 服务),缓冲的指标何时写入文件 - 在计时器上,或者缓冲一定数量的数据时?这是可配置的吗?如果是,如何配置?
package com.examples.spf4j;
import org.spf4j.perf.MeasurementRecorder;
import org.spf4j.perf.impl.RecorderFactory;
import java.io.File;
import java.util.Random;
import org.junit.Test;
public class TestMeasurementRecorder {
@Test
public void testMeasurementRecorder() throws InterruptedException {
initialize();
MeasurementRecorder measurementRecorder = getMeasurementRecorder();
Random random = new Random();
for (int i=0; i<=1000; i++) {
long startTime = System.currentTimeMillis();
Thread.sleep(100 + random.nextInt(100));
measurementRecorder.record(System.currentTimeMillis() - startTime);
}
}
public static void initialize() {
String tsDbFile = System.getProperty("user.dir") + File.separator + "spf4j-performance-monitor.tsdb2";
String tsTextFile = System.getProperty("user.dir") + File.separator + "spf4j-performance-monitor.txt";
System.setProperty("spf4j.perf.ms.config", "TSDB@" + tsDbFile + "," + "TSDB_TXT@" + tsTextFile);
}
public static MeasurementRecorder getMeasurementRecorder() {
int sampleTimeMillis = 1000;
return RecorderFactory.createScalableQuantizedRecorder("response time", "ms", sampleTimeMillis, 10, 0, 40, 10);
}
}
您需要设置系统 属性: spf4j.perf.ms.periodicFlush=true 启用定期刷新。