求推荐一个工具 能在 Ubuntu 上分析 C++程序内存使用情况

36 天前
 ZxxWww

最近在做一个机器人项目,用了开源的代码实现部分功能。但是测试发现随着程序运行时间变长,占用的内存也会越来越大

请教一下各位佬,有没有什么工具能比较直观地看到是哪一个变量或者那一部分程序导致的问题?

1364 次点击
所在节点    程序员
15 条回复
InkStone
36 天前
valgrind
sryanyuan
36 天前
gperftools 的 heap profiler ,可以根据分配的总内存大小来不断生成内存分配描述文件,然后 diff 一下就能知道内存分配在哪里了
ZxxWww
36 天前
coderluan
36 天前
啥也不用装,编译的时候加上-fsanitize=address 就行了。
jworg
36 天前
要不搜一下 heaptrack 带图形界面
shylockhg
36 天前
在 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 会显示内存使用图表和数据。
msg7086
36 天前
@shylockhg 只贴 AI 生成内容的账号会被站长直接永封。
shylockhg
36 天前
@msg7086 这么吓人,可惜不能删除
zanderwang1
36 天前
vtune
terryching
36 天前
感觉 ASAN 是最适合的
kwest
36 天前
valgrind 就够用了
LwZiye
35 天前
@jworg heaptrack 使用起来还不错
desstiony
35 天前
ros?
nevermoreluo
35 天前
valgrind 瑞士军刀,就是要折腾
intel vtune 无脑好用,能定位到性能损耗最大的部分,但是具体内存占用的这部分是否真的泄露了,要你自己判断
owt5008137
35 天前
补充一个。jemalloc
开 perf 之后直接 jeperf 输出

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1064659

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX