下载 lightweight-java-profiler 采样栈信息
https://code.google.com/archive/p/lightweight-java-profiler/source/default/source
下载 lightweight-java-profiler
工具
- 修改
1
2
3
4# 第4行 BITS?=32 改成
BITS?=64
# 第49行 INCLUDES=-I$(JAVA_HOME)/$(HEADERS) -I$(JAVA_HOME)/$(HEADERS)/$(UNAME) 改成
INCLUDES=-I$(JAVA_HOME)/$(HEADERS) -I$(JAVA_HOME)/$(HEADERS)/$(UNAME) -I/usr/include/x86_64-linux-gnu
- 编译
1
2
3
4make all
# yum -y update gcc
# yum -y install gcc+ gcc-c++
# 报错的话,要修改display.cc 第 22 行,fprintf(file_, "%" PRIdPTR" ", traces[i].count);
下载 FlameGraph 火焰图生成工具
1 | git clone http://github.com/brendangregg/FlameGraph |
使用 Profiler 工具生成 trace.txt 文件
1 | # tomcat 中 |
注意:trace 不是实时写入,而是在应用 shutdown 的时候才写入的,别 kill 应用,否则 trace 里面什么都没有
另外有几个参数可在编译时修改,都在global.h文件中。首先是采样的频率,缺省是100次 每秒;另外是最大采样的线程栈,缺省3000,超过3000就忽略(对于复杂的应用明显不够) ;最后是栈的深度,缺省是128(对于调用层次深的应用调大)。
将 trace.txt 文件转换为 trace.svg 格式的火焰图
1 | cd FlameGraph |
用浏览器打开生成的 traces.svg 火焰图文件
默认:samples
–countname=pages
1 pages = 4 kbyte
–countname=bytes