linux性能分析工具

linux静态分析性能工具

在这里插入图片描述

linux性能测试工具

在这里插入图片描述

linux性能优化工具

在这里插入图片描述

linux性能监测工具:sar

在这里插入图片描述

linux性能监测工具:pertools

在这里插入图片描述

linux bcc/BPF跟踪工具

在这里插入图片描述

bpftrace/eBPF工具

在这里插入图片描述

新的BPF性能分析工具

在这里插入图片描述

c++开发常用开源性能分析工具

重点研究这几种
1.valgrind
很占用内存,并且启动分析性能下降20-30倍,测试环境可以使用。

Memcheck 检测内存泄漏;
Callgrind 分析函数调用,可以用来分析开源项目的源码;
Cachegrind 分析cpu的cache L1 L2;
Helgrind 分析多线程竞争问题;
DRD 线程错误检测;
Massif 堆栈分析器;
DHAT 动态堆栈分析;
Lackey 示例程序,可以自己扩展;
Nulgrind 也是示例,最小的valgrind工具;
BBV 仍处于试验状态的基本款矢量生成器。

2.sanitizers
占用内存少,速度快,主要就是内存检测,gcc4.8以上自带,推荐使用。不退出的进程可以使用__lsan_do_leak_check()执行检查并在发现泄漏时终止,__lsan_do_recoverable_leak_check不终止多次调用。-fsanitize=thread,-fsanitize=address,-fsanitize=leak

AddressSanitizer 检测地址问题,越界问题,LeakSanitizer 检测内存泄漏
ThreadSanitizer 检测竞态和死锁
MemorySanitizer 检测未初始化内存
HWASAN 新的地址检测,消耗更少内存
UBSan 未定义特性的检测器

3.gperftools
gperftools使用了tcmalloc(thread-caching malloc,线程缓冲malloc),推荐使用。

heap-checking 分析内存泄漏
heap-profiling 堆栈分析
cpu profiler  cpu性能分析

4.windows平台直接使用vs2022性能分析工具齐全

sanitizers原理

1.AddressSanitizer 原理
使用内存映射,8个存储字节对应一个检测字节。按8字节对齐,检测字节记录每个存储字节的状态。操作没有记录已使用的内存就会报错。64位系统128t虚拟内存,进程占用虚拟内存20T,主要就是映射用到。
2.ThreadSanitizer 原理
也是使用内存映射,一个Shadow State有2,4,8个状态Shadow Words ,每个Shadow Words 占64位(8个字节)。每8个字节对齐的内存映射到一个Shadow State。Shadow Word记录了占用的信息。最重要的是State Machine,一块内存被使用就会在Shadow State的Shadow Word记录使用的线程信息,访问Shadow Word是64位原子操作,如果构成竞态就警告。ThreadSanitizer检测比较耗内存,如果一个Shadow State有4个Shadow Words,进程的内存使用要多用4倍大小。

ThreadSanitizer很占用内存,要检测竞态和死锁检测不一样,只检测死锁每个线程直接在lock加入的地方记录资源状态,多个资源使用链表连接起来,unlock的地方释放资源并且指向这个资源的上个资源指针置空,每加入一个资源前先判断是否要获取的资源已经存在记录中,如果存在指针指向它并计算是否有环,有环就是死锁。

uprobe

bpf用户空间的分析工具,可以在程序运行中不重启就嵌入跟踪函数,嵌入到malloc函数中可以分析内存泄漏。

perf

perf record -p 111
perf report

  • 1
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值