最近在做一个机器人项目,用了开源的代码实现部分功能。但是测试发现随着程序运行时间变长,占用的内存也会越来越大。
请教一下各位佬,有没有什么工具能比较直观地看到是哪一个变量或者那一部分程序导致的问题?
1
InkStone 136 天前
valgrind
|
2
sryanyuan 136 天前
gperftools 的 heap profiler ,可以根据分配的总内存大小来不断生成内存分配描述文件,然后 diff 一下就能知道内存分配在哪里了
|
4
coderluan 136 天前
啥也不用装,编译的时候加上-fsanitize=address 就行了。
|
5
jworg 136 天前
要不搜一下 heaptrack 带图形界面
|
6
shylockhg 136 天前
在 Ubuntu 上分析 C++ 程序的内存使用情况,有几种工具可以推荐:
1. **Valgrind**: - Valgrind 是一个著名的内存调试和分析工具,其中的 Massif 工具可以用来分析程序的内存使用情况。它可以帮助你识别内存泄漏和内存使用模式。 2. **gperftools**: - gperftools (之前称为 Google Performance Tools )提供了一个堆分析器和 CPU 分析器。它的 `heap-profiler` 功能可以生成程序的内存分配情况的详细报告。 3. **Memcheck (Valgrind 的一部分)**: - Memcheck 是 Valgrind 中的一个工具,专门用于检测内存泄漏、内存越界等问题。 4. **Massif (Valgrind 的一部分)**: - Massif 是 Valgrind 工具集中的一个堆分析工具,它可以生成堆使用的图表,帮助你理解内存使用情况。 5. **GCC/g++ 的 `-ftime-report` 选项**: - 编译时加上 `-ftime-report` 选项,GCC 会在编译结束后输出程序的时间消耗报告,其中包含了一些内存使用信息。 6. **Clang 的 `-fsanitize=memory` 选项**: - 使用 Clang 编译器的内存 sanitizer 可以帮助检测内存泄漏和越界问题。 7. **KCachegrind**: - KCachegrind 是一个图形化的分析器,可以读取 Callgrind 工具生成的文件,它提供了一个直观的界面来查看程序的性能数据。 8. **Callgrind (Valgrind 的一部分)**: - Callgrind 是 Valgrind 工具集中的一个分析工具,它可以生成程序调用的详细报告,包括函数级别的内存分配情况。 9. **Brendan Gregg's "Memory Profiler"**: - 这是一个简单的工具,可以监控程序的内存使用情况,并且生成火焰图。 10. **perf**: - `perf` 是 Linux 内核提供的性能分析工具,它也可以用来分析内存访问模式。 使用这些工具时,您可能需要对程序进行编译,以便包含额外的调试信息,例如使用 `-g` 选项。然后,运行相应的分析工具,并根据生成的报告来识别内存使用问题。 例如,使用 Valgrind 的基本命令如下: ```shell valgrind --tool=massif ./your_program ``` 这将启动 Massif 并分析 `your_program` 的内存使用情况。分析完成后,Valgrind 会显示内存使用图表和数据。 |
9
zanderwang1 135 天前
vtune
|
10
terryching 135 天前
感觉 ASAN 是最适合的
|
11
kwest 135 天前
valgrind 就够用了
|
13
desstiony 135 天前
ros?
|
14
nevermoreluo 135 天前
valgrind 瑞士军刀,就是要折腾
intel vtune 无脑好用,能定位到性能损耗最大的部分,但是具体内存占用的这部分是否真的泄露了,要你自己判断 |
15
owt5008137 135 天前 via Android
补充一个。jemalloc
开 perf 之后直接 jeperf 输出 |