perf 与 perf的java代理用法简介

perf top

默认情况下perf top是无法显示信息的,需要sudo perf top或者echo -1 > /proc/sys/kernel/perf_event_paranoid(在Ubuntu16.04,还需要echo 0 > /proc/sys/kernel/kptr_restrict)。

perf top -g -p PID(查看进程号是PID的进程的cpu占用信息,加-g参数可以打印详细堆栈信息)

即可以正常显示perf top如下:

第一列:符号引发的性能事件的比例,指占用的cpu周期比例。

第二列:符号所在的DSO(Dynamic Shared Object),可以是应用程序、内核、动态链接库、模块。

第三列:DSO的类型。[.]表示此符号属于用户态的ELF文件,包括可执行文件与动态链接库;[k]表述此符号属于内核或模块。

第四列:符号名。有些符号不能解析为函数名,只能用地址表示。

进入perf top后,需要查看堆栈信息,或选择指定进程等操作可输入?查看手册

 

perf不能查看java进程的信息

缺失Java函数信息的原因:

  • JVM内部即时编译器JIT,不会公开传统的符号表供系统分析器读取
  • JVM默认使用帧指针寄存器(x86-64上的RBP)作为通用寄存器,与传统的栈不同

为了使java进程可以用上perf,此时需要用到perf代理:perf-map-agent

  • 确保JDK版本Java 8 update 60 build 19及以上,该版本添加了-XX:+PreserveFramePointer选项的支持
  • 安装perf-map-agent步骤
sudo bash
yum -y install cmake
export JAVA_HOME=/path-to-your-new-jdk8
cd /destination-for-perf-map-agent  # I use /usr/lib/jvm
git clone --depth=1 https://github.com/jvm-profiling-tools/perf-map-agent
cd perf-map-agent
cmake .
make
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值