Perf4J

Perf4J 的目标是通过易于集成(和扩展)的开源软件包提供这些常用的 Java 性能监控功能。包括:

  • 简洁的 stop watch计时机制;
  • 提供命令行工具,从原始的日志文件中生成汇总的统计数据和性能图表;
  • 定制的 log4j appender,可以在运行时应用中生成数据和图表,计划在以后的版本中支持 java.util.logging 和 logback
  • 能够以 JMX 属性的形式发布性能数据,在数据超过指定阈值时发送通知;
  • 提供 @Profiled 注解和一套自定义机制,允许在与 AOP 框架(如 AspectJ 或者 Spring AOP)集成时巧妙地计时。

一句话:Pef4j 之于 System.currentTimeMillis 就像 log4j 之于 System.out.println()

使用方法

  1. 引入 Maven 依赖
<dependency>
    <groupId>org.perf4j</groupId>
    <artifactId>perf4j</artifactId>
    <version>0.9.16</version>
</dependency>
  1. 添加监控代码
public class Worker {

    public void run() {
        StopWatch stopWatch = new LoggingStopWatch("worker.run");

        try {
            int interval = ThreadLocalRandom.current().nextInt(1000);
            Thread.sleep(interval);
            stopWatch.stop("example1", "current message text: " + interval);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
}
  1. 执行,输出日志
start[1488182180833] time[302] tag[example1] message[current message text: 302]
start[1488182181135] time[329] tag[example1] message[current message text: 330]
start[1488182181465] time[385] tag[example1] message[current message text: 385]
start[1488182181850] time[675] tag[example1] message[current message text: 676]
start[1488182182526] time[437] tag[example1] message[current message text: 436]
start[1488182182963] time[706] tag[example1] message[current message text: 707]
start[1488182183670] time[674] tag[example1] message[current message text: 675]
start[1488182184345] time[28] tag[example1] message[current message text: 28]
start[1488182184373] time[376] tag[example1] message[current message text: 377]
start[1488182184750] time[817] tag[example1] message[current message text: 817]
start[1488182185567] time[667] tag[example1] message[current message text: 668]
start[1488182186235] time[411] tag[example1] message[current message text: 411]
start[1488182186646] time[43] tag[example1] message[current message text: 44]
start[1488182186690] time[30] tag[example1] message[current message text: 31]
start[1488182186721] time[958] tag[example1] message[current message text: 959]
start[1488182187680] time[767] tag[example1] message[current message text: 768]
start[1488182188448] time[234] tag[example1] message[current message text: 235]
start[1488182188683] time[822] tag[example1] message[current message text: 822]
start[1488182189505] time[856] tag[example1] message[current message text: 857]
start[1488182190362] time[270] tag[example1] message[current message text: 271]
start[1488182190633] time[709] tag[example1] message[current message text: 709]
start[1488182191342] time[704] tag[example1] message[current message text: 705]
start[1488182192047] time[816] tag[example1] message[current message text: 817]
start[1488182192864] time[218] tag[example1] message[current message text: 219]
start[1488182193083] time[542] tag[example1] message[current message text: 543]
start[1488182193626] time[327] tag[example1] message[current message text: 328]
start[1488182193954] time[435] tag[example1] message[current message text: 436]
start[1488182194390] time[277] tag[example1] message[current message text: 278]
start[1488182194668] time[298] tag[example1] message[current message text: 299]
start[1488182194967] time[577] tag[example1] message[current message text: 578]
start[1488182195545] time[35] tag[example1] message[current message text: 35]
start[1488182195580] time[584] tag[example1] message[current message text: 585]
start[1488182196165] time[558] tag[example1] message[current message text: 559]
start[1488182196724] time[854] tag[example1] message[current message text: 854]
start[1488182197578] time[447] tag[example1] message[current message text: 448]
start[1488182198026] time[800] tag[example1] message[current message text: 801]
start[1488182198827] time[40] tag[example1] message[current message text: 41]
start[1488182198868] time[342] tag[example1] message[current message text: 342]
start[1488182199210] time[734] tag[example1] message[current message text: 735]
start[1488182199945] time[306] tag[example1] message[current message text: 306]
start[1488182200251] time[409] tag[example1] message[current message text: 410]
start[1488182200661] time[298] tag[example1] message[current message text: 298]
start[1488182200959] time[507] tag[example1] message[current message text: 508]
start[1488182201467] time[997] tag[example1] message[current message text: 998]
start[1488182202465] time[848] tag[example1] message[current message text: 849]
start[1488182203314] time[769] tag[example1] message[current message text: 770]
start[1488182204084] time[423] tag[example1] message[current message text: 424]
start[1488182204508] time[755] tag[example1] message[current message text: 756]
start[1488182205264] time[271] tag[example1] message[current message text: 271]
start[1488182205535] time[214] tag[example1] message[current message text: 215]
start[1488182205750] time[394] tag[example1] message[current message text: 395]
start[1488182206145] time[544] tag[example1] message[current message text: 544]
start[1488182206689] time[486] tag[example1] message[current message text: 487]
start[1488182207176] time[249] tag[example1] message[current message text: 250]
start[1488182207426] time[661] tag[example1] message[current message text: 662]
start[1488182208088] time[889] tag[example1] message[current message text: 890]
start[1488182208978] time[351] tag[example1] message[current message text: 352]
start[1488182209330] time[530] tag[example1] message[current message text: 530]
start[1488182209860] time[816] tag[example1] message[current message text: 817]
start[1488182210677] time[302] tag[example1] message[current message text: 303]
start[1488182210980] time[513] tag[example1] message[current message text: 513]
start[1488182211493] time[307] tag[example1] message[current message text: 308]
start[1488182211803] time[400] tag[example1] message[current message text: 401]
start[1488182212204] time[116] tag[example1] message[current message text: 117]
start[1488182212321] time[397] tag[example1] message[current message text: 398]
start[1488182212719] time[19] tag[example1] message[current message text: 19]
start[1488182212738] time[88] tag[example1] message[current message text: 88]
start[1488182212826] time[660] tag[example1] message[current message text: 661]
start[1488182213487] time[293] tag[example1] message[current message text: 294]
start[1488182213781] time[60] tag[example1] message[current message text: 61]
start[1488182213842] time[806] tag[example1] message[current message text: 807]
start[1488182214649] time[192] tag[example1] message[current message text: 193]
start[1488182214842] time[160] tag[example1] message[current message text: 161]
start[1488182215003] time[665] tag[example1] message[current message text: 666]
start[1488182215669] time[141] tag[example1] message[current message text: 142]
start[1488182215811] time[595] tag[example1] message[current message text: 595]
start[1488182216406] time[790] tag[example1] message[current message text: 791]
start[1488182217197] time[665] tag[example1] message[current message text: 665]
start[1488182217862] time[957] tag[example1] message[current message text: 958]
start[1488182218820] time[303] tag[example1] message[current message text: 304]
start[1488182219124] time[818] tag[example1] message[current message text: 819]
start[1488182219943] time[649] tag[example1] message[current message text: 650]
start[1488182220593] time[371] tag[example1] message[current message text: 372]
start[1488182220965] time[173] tag[example1] message[current message text: 173]
start[1488182221138] time[300] tag[example1] message[current message text: 301]
start[1488182221439] time[504] tag[example1] message[current message text: 505]
start[1488182221944] time[519] tag[example1] message[current message text: 520]
start[1488182222464] time[217] tag[example1] message[current message text: 218]
start[1488182222682] time[875] tag[example1] message[current message text: 876]
start[1488182223558] time[431] tag[example1] message[current message text: 431]
start[1488182223989] time[517] tag[example1] message[current message text: 518]
start[1488182224507] time[460] tag[example1] message[current message text: 461]
start[1488182224968] time[731] tag[example1] message[current message text: 731]
start[1488182225699] time[550] tag[example1] message[current message text: 551]
start[1488182226250] time[151] tag[example1] message[current message text: 152]
start[1488182226402] time[157] tag[example1] message[current message text: 158]
start[1488182226560] time[382] tag[example1] message[current message text: 382]
start[1488182226942] time[482] tag[example1] message[current message text: 483]
start[1488182227425] time[263] tag[example1] message[current message text: 264]
start[1488182227689] time[936] tag[example1] message[current message text: 937]
  1. 性能日志分析

找到 pef4j 的 jar 包,输入如下命令:

java -jar perf4j-0.9.16.jar -g perf_out.html perf_log.txt -t 5000

上述命令会生成一个 perf_out.html 的网页,如下:

clipboard.png

分析工具的使用帮助通过如下命令查看

java -jar perf4j-0.9.16.jar --help
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,470评论 6 501
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,393评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,577评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,176评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,189评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,155评论 1 299
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,041评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,903评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,319评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,539评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,703评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,417评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,013评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,664评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,818评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,711评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,601评论 2 353

推荐阅读更多精彩内容

  • 背景 一年多以前我在知乎上答了有关LeetCode的问题, 分享了一些自己做题目的经验。 张土汪:刷leetcod...
    土汪阅读 12,743评论 0 33
  • 今日一大早,我还堵在路上,毛毛就发了一张古鸡鸣寺樱花照给我,我就说择日不如撞日,今天中午一起去看樱花吧。 到了那里...
    广陵十四阅读 351评论 13 5
  • 那个抽屉放着过往的、细碎的物件,不常打开的。一经打开,掂量着,清理一番,抽屉渐趋简洁。但那几张薄纸翻阅后又静静地放...
    用心生活用字记录阅读 230评论 0 0
  • 岁月是一条清且浅的河,悄悄的带走我们最美的年华,带走那些成长的勇气和以及敢于努力争取的那一颗孤勇的心。 光阴流转,...
    玫瑰与花阅读 265评论 0 0
  • 其实,我很累了。我习惯假装开心、假装难过,假装在意、假装无所谓,习惯了一个人面对所有。我可以在,很痛的时候说没关系...
    思_3a2d阅读 255评论 0 0