如何确定CPU性能瓶颈

原理

火焰图

参考文章

火焰图的原理可以参考:如何读懂火焰图?

工具

async-profiler

命令

  • -e
    指定要分析的事件类型, type可以为:
    • cpu 分析CPU使用情况,这是最常用的选项之一,用来找出哪些方法或代码路径占用了最多的CPU时间。
    • alloc 分析内存分配情况,帮助你找出哪些方法分配了最多的内存。
    • lock 分析锁竞争,找出哪些线程或代码路径在争夺锁,从而导致性能瓶颈。
    • wall 分析实际的墙上时间(Wall-clock time),可以包括线程阻塞和等待时间。这在分析多线程应用程序时非常有用。
# 分析一个 Java 应用程序的CPU使用情况并生成火焰图
./profiler.sh -e cpu -o flamegraph -f flamegraph.svg <PID>
  • -d :
    指定分析持续时间,单位为秒。
./profiler.sh -d 30 -e cpu -f profile.html <PID>
#这将在 30 秒内捕获 CPU 事件。
  • -f :
    指定输出文件的路径和名称。
./profiler.sh -e cpu -f cpu-profile.html <PID>
  • -i :
    设置采样间隔,默认为 1000000 纳秒(1 毫秒)。
./profiler.sh -e cpu -i 500000 -f profile.html <PID>
#这将以 0.5 毫秒的间隔采样 CPU 事件。
  • -t:
    记录线程级别的调用栈,默认只记录应用级别的调用栈。
./profiler.sh -e cpu -t -f thread-profile.html <PID>
  • -b :
    设置内核缓冲区的大小,单位为KB,默认为 8192 KB。
./profiler.sh -e cpu -b 16384 -f profile.html <PID>
#这将缓冲区大小设置为 16384 KB。
  • -j :
    设置 Java 堆栈的最大深度,默认为 2048。
./profiler.sh -e cpu -j 4096 -f profile.html <PID>
  • -v:
    打印详细的调试信息,用于诊断 async-profiler 运行过程中的问题。
./profiler.sh -e cpu -v -f profile.html <PID>
  • -I :
    仅包含与指定模式匹配的堆栈,支持正则表达式。
./profiler.sh -e cpu -I 'java/util/.*' -f profile.html <PID>
# 这只会采样匹配 java/util/ 的堆栈。
  • -x :
    排除与指定模式匹配的堆栈,支持正则表达式。
./profiler.sh -e cpu -x 'sun/.*' -f profile.html <PID>
# 这将排除 sun/ 类的堆栈。
  • –all-user:
    分析所有用户代码,而不仅仅是当前用户的代码。
./profiler.sh -e cpu --all-user -f profile.html <PID>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值