Linux 进程占用内存过高分析
要素:
1. 进程 ID (PID)
- 通过 ps aux 或 top 命令确定占用内存过高的进程的 PID。
2. rss 和 vss
- rss(常驻集大小):进程物理驻留在内存中的大小。
- vss(虚拟内存大小):进程可访问的虚拟地址空间大小。
- 可通过 ps aux --sort -rss 或 top -o rss 查看。
3. malloc() 和 free() 统计
- 使用 malloc_info 检查分配和释放的内存统计信息。
- 查找分配总数与释放总数之间的差异。
- 可能指示内存泄漏。
4. 文件描述符
- 查看进程打开的文件描述符数量(lsof -p
)。
- 过多打开的文件描述符可能导致内存泄漏。
5. 共享库
- 检查进程是否加载了大量的共享库(ldd )。
- 意外加载的库可能导致内存使用过高。
6. 线程分析
- 使用 top -H -p 查看进程的线程和内存使用情况。
- 查找占用内存过多的特定线程。
7. 内存映射
- 检查进程是否创建了大量内存映射(cat /proc//maps)。
- 过多内存映射可能导致碎片化和内存使用过高。
8. 核心转储
- 通过运行 gcore 创建进程的 core 转储。
- 使用 gdb 分析 core 转储以查找内存泄漏或其他问题。