Java服务器端编程程序员程序猿阵线联盟-汇总各类技术干货

MyPerf4J 一个极快的Java接口性能监控和统计工具

2018-04-30  本文已影响100人  怪盗_7003

MyPerf4J: GitHub地址

一个极快的Java接口性能监控和统计工具。受perf4jTProfiler启发而来。
致力于成为可在生产环境长时间使用的性能监控和统计工具!
如果觉得写得还行,请给个star :) 。

多语言文档

背景

需求

设计

内存

压测

线程数 每线程循环数 RPS
1 1000000000 13815816
2 1000000000 16199712
4 1000000000 33060632
8 1000000000 55981416

使用

#配置PerfStatsProcessor,可不配置
PerfStatsProcessor=cn.perf4j.demo.MyPerfStatsProcessor

#配置Record模式,可配置为accurate/rough
RecorderMode=accurate

#配置时间片,单位为ms,最小30s,最大600s
MillTimeSlice=30000

#需要监控的package,可配置多个,用英文';'分隔
IncludePackages=cn.perf4j;org.myperf4j

#不需要监控的package,可配置多个,用英文';'分隔
ExcludePackages=org.spring;

#是否开启debug日志,可配置为true/false
Debug.PrintDebugLog=true

#可配置为byProfiler/byPackage
ProfilingType=byProfiler

#可配置多个方法名,用英文';'分隔
ExcludeMethods=equals;hash

#是否排除私有方法,true/false
ExcludePrivateMethod=true

#可配置多个ClassLoader,用英文';'分隔
ExcludeClassLoaders=
package cn.perf4j.demo;

import cn.myperf4j.base.annotation.NonProfiler;
import cn.myperf4j.base.annotation.Profiler;

import java.util.concurrent.TimeUnit;

/**
 * Created by LinShunkang on 2018/4/7
 */
@Profiler(mostTimeThreshold = 2000, outThresholdCount = 200)
public class UserServiceImpl implements UserService {

    private long f1;

    @Override
    @Profiler(mostTimeThreshold = 3000, outThresholdCount = 300)
    public long getId1(long id) throws InterruptedException {
        TimeUnit.MILLISECONDS.sleep(4);
        return id + 100;
    }

    private long privateGetId1() {
        return 1L;
    }

    @Override
    public long getId2(long id) {
        return id + 2;
    }

    @Override
    @NonProfiler
    public long getId3(long id) {
        return 0;
    }

    public long getF1() {
        return f1;
    }

    public void setF1(long f1) {
        this.f1 = f1;
    }
}
package cn.perf4j.demo;


import cn.myperf4j.base.PerfStats;
import cn.myperf4j.core.util.PerfStatsFormatter;
import cn.myperf4j.base.PerfStatsProcessor;

import java.util.List;

/**
 * Created by LinShunkang on 2018/4/9
 */
public class MyPerfStatsProcessor implements PerfStatsProcessor {

    @Override
    public void process(List<PerfStats> perfStatsList, long startMillis, long stopMillis) {
        //You can do anything you want to do :)
        System.out.println(PerfStatsFormatter.getFormatStr(perfStatsList, startMillis, stopMillis));
    }

}
MyPerf4J Performance Statistics [2018-05-20 12:33:00, 2018-05-20 12:33:30]
Api                         RPS  Avg(ms)  Min(ms)  Max(ms)   StdDev     Count     TP50     TP90     TP95     TP99    TP999   TP9999  TP99999    TP100
UserServiceImpl.getId1       47     4.47        4        7     0.07      1475        4        5        7        7        7        7        7        7
UserServiceImpl.getId2       47     0.00        0        0     0.00      1475        0        0        0        0        0        0        0        0

关于Rough模式与Accurate模式

关于MyPerf4J-ASM

上一篇 下一篇

猜你喜欢

热点阅读