linux - 找出导致应用程序内存泄漏的原因

标签 linux memory

我有一台 Linux (CentOS) 服务器,在该服务器上运行游戏服务器,该服务器最近在更新后开始泄漏内存。如何找出导致服务器内存泄漏的原因?

最佳答案

内存分析 使用Perf工具检查泄漏。

对应用程序中运行的所有进程运行最后一个命令,并统计结果以找出导致内存泄漏的原因。

使用 perf 进行探针的示例用法可以是检查 libc 的 malloc() 和 free() 调用:

$ perf probe -x /lib64/libc.so.6 malloc

$ perf probe -x /lib64/libc.so.6 free

添加了新事件: probe_libc:malloc(在 0x7eac0 上)

已创建探测器。现在,让我们记录一下 4 秒内整个系统的 malloc 和 free 的全局使用情况:

$ perf record -e probe_libc:malloc -agR sleep 4

$ perf record -e probe_libc:free -agR sleep 4

让我们记录 4 秒内所有进程中 malloc 和 free 的使用情况:

$ perf stat -e probe_libc:free -e probe_libc:malloc -ag -p $(pgrep $process_name$) sleep 4

输出:

Performance counter stats for process id '1153':

11,312 probe_libc:free

11,644 probe_libc:malloc

4.001091828 seconds time elapsed

如果每次运行 perf 命令时 malloc 和 free 计数之间的差异增加,则表明存在内存泄漏。

$ perf record -e probe_libc:free -e probe_libc:malloc -agR sleep 2

运行上述命令来检查整个应用程序。

稍后运行,

$ perf report

获取上述运行的报告。

关于linux - 找出导致应用程序内存泄漏的原因,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25704966/

相关文章:

java - LDAP 与 jBilling 集成

javascript - 使用 "big"数据在 node.js 中启动 webworker 时内存快速上升

使用二维动态分配字符串创建动态分配结构

java - 有没有在没有内存开销的情况下在 Java 中存储位?

php - PHP 函数是否区分大小写,如果不是...?

在运行 configure 时配置不同于默认的编译器

c++ - 使用共享库在 Ubuntu 上部署 Qt 应用程序二进制文件

c - 是否有另一种方法可以在 C 中释放动态分配的内存 - 不使用 free() 函数?

c++ - 此代码是否会导致内存泄漏(Arduino)

php - 二进制转字符串,每8位空格