Java性能耗时监控工具

导读:本篇文章讲解 Java性能耗时监控工具,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com

Java性能耗时监控工具(基于Spring的StopWatch监控工具)

特点

  • 改编自Spring的StopWatch,功能增强,原理不变
  • 代码实现简单,使用更简单
  • 支持Slf4j日志打印,可使用Log4j,Logback等日志库
  • 统一归纳,展示每项任务耗时与占用总时间的百分比,展示结果直观
  • 性能消耗相对较小,并且最大程度的保证了start与stop之间的时间记录的准确性
  • 可在start时直接指定任务名字,从而更加直观的显示记录结果
  • 支持嵌套,可在一个任务中监控另一个任务
  • 单独发布jar,不需要依赖spring相关的jar

使用实例

  • 添加依赖

已发布到jitpack,可直接使用

allprojects {
    repositories {
        mavenCentral()
        maven {
            url "https://jitpack.io"
        }
    }
}

dependencies {
    implementation 'com.github.virtuex:time_watcher:1.0'
    implementation("org.slf4j:slf4j-log4j12:1.6.6")
    implementation("org.slf4j:slf4j-api:1.7.26")
}

  • 测试代码

public class LogingStopWatchTest {
    private static Logger logger = LoggerFactory.getLogger(LogingStopWatchTest.class);

    public static void main(String[] args) {
        initWatch("ROOT");
        startWatch("TEST");
        startWatch("TEST2-1");
        try {
            Thread.sleep(3000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        stopWatch();
        startWatch("TEST2-2");
        try {
            Thread.sleep(1000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        stopWatch();
        stopWatch();
        outAndReleaseWatch();
    }


    /**
     * 开始监控任务,与stopWatch成对出现
     */
    protected static void startWatch(String taskName) {
        if (logger.isDebugEnabled()) {
            StopWatchContext.startWatch(taskName, -1);
        }
    }

    /**
     * 结束监控任务,与startWatch成对出现
     */
    protected static void stopWatch() {
        if (logger.isDebugEnabled()) {
            StopWatchContext.stopWatch();
        }
    }

    /**
     * 初始化监控
     */
    private static void initWatch(String watchName) {
        if (logger.isDebugEnabled()) {
            StopWatch stopWatch = new Slf4jStopWatch(watchName, true, -1);
            StopWatchContext.setCurrentStopWatch(new StopWatchPack(stopWatch));
            // 开始根任务
            startWatch("--");
        }
    }


    /**
     * 始放监控资源
     */
    private static void outAndReleaseWatch() {
        if (logger.isDebugEnabled()) {
            // 结束根任务
            stopWatch();
            // 打印详细
            StopWatchContext.prettyPrint();
            StopWatchContext.releaseStopWatch();
        }
    }
}
  • 运行结果

运行结果中很直观的展示了任务耗时,及其子任务所占的百分比

2020-11-18 23:31:16 [DEBUG] slf4j.Slf4jStopWatch (log:49) -   
Task Name 'ROOT': Running Time = 4s 1ms 
  -----------------------------------------
  time        %     Task name
  -----------------------------------------
  4s 1ms   100%  --
    Task Name 'TEST': Running Time = 4s 1ms 
    -----------------------------------------
    time        %     Task name
    -----------------------------------------
    4s 1ms   100%  TEST
      Task Name 'TEST2-1': Running Time = 4s 1ms 
      -----------------------------------------
      time        %     Task name
      -----------------------------------------
      3s   075%  TEST2-1
      1s 1ms   025%  TEST2-2

Github地址

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/13140.html

(0)
小半的头像小半

相关推荐

极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!