我有一台 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/