java性能火焰圖的生成實(shí)踐
序言
如果你經(jīng)常遇到 Java 線上性能問題束手無(wú)策,看著線上服務(wù) CPU 飆升一籌莫展,發(fā)現(xiàn)內(nèi)存不斷泄露滿臉茫然。
別慌,這里有一款低開銷、自帶火焰圖、讓你大呼好用的 Java 性能分析工具 - async-profiler。
1、準(zhǔn)備程序
[root@localhost ~]# git clone git://github.com/jvm-profiling-tools/async-profiler
[root@localhost async-profiler]# yum -y install gcc+ gcc-c++
[root@localhost async-profiler]# make
[root@localhost ~]# more Test.java
public class Test {
public static void main(String[] args) throws Exception {
Test test = new Test();
while (true) {
test.func1();
test.func2();
test.func3();
}
}
public void func1() throws Exception { //調(diào)用第一個(gè)方法,需要100ms
Thread.sleep(100L);
}
public void func2() throws Exception { //調(diào)用第二個(gè)方法,需要500ms
Thread.sleep(500L);
}
public void func3() throws Exception { //調(diào)用第三個(gè)方法,需要1500ms
Thread.sleep(1500L);
}
}
[root@localhost ~]#
[root@localhost ~]# javac Test.java
[root@localhost ~]# java Test
生成火焰圖數(shù)據(jù)
root 21765 7152 0 18:29 pts/1 00:00:00 java Test root 21799 21777 0 18:29 pts/0 00:00:00 grep --color=auto java [root@localhost ~]# cd async-profiler/ [root@localhost async-profiler]# [root@localhost async-profiler]# ./profiler.sh -d 60 -o collapsed -f /tmp/test_01.txt 21765 Profiling for 60 seconds Done [root@localhost async-profiler]# cd .. [root@localhost ~]# ls anaconda-ks.cfg a.out async-profiler FlameGraph jdk-8u121-linux-x64.tar.gz perf.data process.svg test.c Test.class Test.java [root@localhost ~]# cd FlameGraph/ [root@localhost FlameGraph]# perl flamegraph.pl --colors=java /tmp/test_01.txt > test_01.svg [root@localhost FlameGraph]# ls aix-perf.pl example-perf-stacks.txt.gz README.md stackcollapse-instruments.pl stackcollapse-pmc.pl test demos example-perf.svg record-test.sh stackcollapse-java-exceptions.pl stackcollapse-recursive.pl test_01.svg dev files.pl stackcollapse-aix.pl stackcollapse-jstack.pl stackcollapse-sample.awk test.sh difffolded.pl flamegraph.pl stackcollapse-bpftrace.pl stackcollapse-ljp.awk stackcollapse-stap.pl docs jmaps stackcollapse-elfutils.pl stackcollapse-perf.pl stackcollapse-vsprof.pl example-dtrace-stacks.txt pkgsplit-perf.pl stackcollapse-gdb.pl stackcollapse-perf-sched.awk stackcollapse-vtune.pl example-dtrace.svg range-perf.pl stackcollapse-go.pl stackcollapse.pl stackcollapse-xdebug.php [root@localhost FlameGraph]# sz test_01.svg
3、展示

總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Spring Boot實(shí)現(xiàn)異步請(qǐng)求(Servlet 3.0)
在spring 3.2 及以后版本中增加了對(duì)請(qǐng)求的異步處理,這篇文章主要介紹了Spring Boot實(shí)現(xiàn)異步請(qǐng)求(Servlet 3.0),感興趣的小伙伴們可以參考一下。2017-04-04
SpringData JPA基本/高級(jí)/多數(shù)據(jù)源的使用詳解
這篇文章主要介紹了SpringData JPA基本/高級(jí)/多數(shù)據(jù)源的使用詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-02-02
java線程中synchronized和Lock區(qū)別及介紹
這篇文章主要為大家介紹了java線程中synchronized和Lock區(qū)別及介紹,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-06-06
Java中的BufferedInputStream與BufferedOutputStream使用示例
BufferedInputStream和BufferedOutputStream分別繼承于FilterInputStream和FilterOutputStream,代表著緩沖區(qū)的輸入輸出,這里我們就來看一下Java中的BufferedInputStream與BufferedOutputStream使用示例:2016-06-06
RabbitMq報(bào)錯(cuò)reply-code=406 reply-text=PRECONDITION_FAILED
這篇文章主要為大家介紹了RabbitMq報(bào)錯(cuò)reply-code=406 reply-text=PRECONDITION_FAILED分析解決,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-12-12
SpringBoot線上環(huán)境徹底關(guān)閉Swagger-UI的方式
這篇文章主要給大家介紹了SpringBoot線上環(huán)境徹底關(guān)閉Swagger-UI的方式,文中給出了詳細(xì)的代碼示例供大家參考,對(duì)大家的學(xué)習(xí)或工作有一定的幫助,需要的朋友可以參考下2023-12-12
一小時(shí)迅速入門Mybatis之實(shí)體類別名與多參數(shù) 動(dòng)態(tài)SQL
這篇文章主要介紹了一小時(shí)迅速入門Mybatis之實(shí)體類別名與多參數(shù) 動(dòng)態(tài)SQL,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-09-09
Java的stream流多個(gè)字段排序的實(shí)現(xiàn)
本文主要介紹了Java的stream流多個(gè)字段排序的實(shí)現(xiàn),主要是兩種方法,第一種是固定多個(gè)字段排序和第二種動(dòng)態(tài)字段進(jìn)行排序,具有一定的參考價(jià)值,感興趣的可以了解一下2023-10-10

