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 启用定期刷新。