linux性能分析工具

linux静态分析性能工具

linux性能分析工具_第1张图片

linux性能测试工具

linux性能分析工具_第2张图片

linux性能优化工具

linux性能分析工具_第3张图片

linux性能监测工具:sar

linux性能分析工具_第4张图片

linux性能监测工具:pertools

linux性能分析工具_第5张图片

linux bcc/BPF跟踪工具

linux性能分析工具_第6张图片

bpftrace/eBPF工具

linux性能分析工具_第7张图片

新的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函数中可以分析内存泄漏。

你可能感兴趣的:(性能分析线上排查,c++,linux,运维,服务器)