在 Ubuntu 上排查 C++ 程序的内存问题(泄漏、越界、使用量等),常用方法和工具如下,按“从简单到专业”给你梳理。
top / htoptop
htop # 推荐,需安装:sudo apt install htop
适合:看程序吃多少内存。
/proc/<pid>/statuscat /proc/$(pidof your_program)/status
重点看:
VmRSSVmSizegetrusage(C/C++ 自带)#include <sys/resource.h>
#include <iostream>
int main() {
struct rusage usage;
getrusage(RUSAGE_SELF, &usage);
std::cout << "Max RSS: " << usage.ru_maxrss << " KB\n";
}
sudo apt install valgrind
valgrind --leak-check=full ./your_program
输出示例:
==1234== definitely lost: 100 bytes
==1234== indirectly lost: 0 bytes
✅ 优点:
❌ 缺点:
编译时加:
g++ -fsanitize=address -g -O1 main.cpp -o main
./main
能检测:
✅ 比 Valgrind 快很多
✅ 适合开发阶段
sudo apt install heaptrack
heaptrack ./your_program
heaptrack_gui heaptrack.your_program.*.gz
适合:
valgrind --tool=massif ./your_program
ms_print massif.out.*
适合:
| 问题 | 工具 |
|---|---|
| 内存泄漏 | Valgrind / ASan |
| 越界访问 | AddressSanitizer |
| 内存占用高 | htop / massif |
| 谁分配最多 | Heaptrack |
| 实时内存 | /proc/PID/status |
✅ 开发阶段
AddressSanitizer + gdb
✅ 上线前检查
Valgrind
✅ 性能 & 内存分析
Heaptrack / massif
如果你愿意,可以告诉我:
我可以给你更针对性的命令。