如何记录Linux上的内存消耗?

bia*_*lix 38 linux logging memory-consumption

是否有任何现成的解决方案来记录系统启动时的内存消耗?我想将数据记录到简单的文本文件或某个数据库中,以便稍后进行分析.

我正在研究基于Linux 2.4的嵌入式系统.我需要调试与内存消耗相关的问题.我的应用程序会自动启动每个系统启动.我需要从定期间隔(尽可能经常)获取带时间戳的数据的方法,这样我就可以追踪问题.

我的问题的症状:当系统启动时,它启动了我的主应用程序和GUI,以可视化系统的主要参数.GUI基于GTK +(X服务器).如果我禁用GUI和X服务器,那么我的应用程序工作正常.如果我启用GUI和X服务器,当我在主板上安装256 MiB或512 MiB的物理内存时,它不起作用.如果我安装了1 GiB内存,那么一切正常.

Gun*_*iez 32

像一个小脚本

rm memory.log
while true; do free >> memory.log; sleep 1; done
Run Code Online (Sandbox Code Playgroud)

  • `free -s 1> memory.log`; 这不会导致每秒启动新流程的成本.但它没有时间戳.(我知道这是一个老帖子,但我一直在寻找同样的事情,其他人也是如此). (12认同)

kla*_* se 27

以下脚本打印时间戳和标题.

#!/bin/bash -e

echo "      date     time $(free -m | grep total | sed -E 's/^    (.*)/\1/g')"
while true; do
    echo "$(date '+%Y-%m-%d %H:%M:%S') $(free -m | grep Mem: | sed 's/Mem://g')"
    sleep 1
done
Run Code Online (Sandbox Code Playgroud)

输出看起来像这样(在Ubuntu 15.04,64位上测试).

      date     time          total       used       free     shared    buffers     cached
2015-08-01 13:57:27          24002      13283      10718        522        693       2308
2015-08-01 13:57:28          24002      13321      10680        522        693       2308
2015-08-01 13:57:29          24002      13355      10646        522        693       2308
2015-08-01 13:57:30          24002      13353      10648        522        693       2308
Run Code Online (Sandbox Code Playgroud)


Ste*_* B. 5

你可以把类似的东西

vmstat X >> mylogfile
Run Code Online (Sandbox Code Playgroud)

进入启动脚本。由于您的应用程序已经在启动中,因此您只需将此行添加到您的应用程序已使用的初始化脚本的末尾即可。(其中 X 是日志消息之间的秒数)


Cla*_*ied 5

有一个程序叫做

sar
Run Code Online (Sandbox Code Playgroud)

在* nix系统上。您可以尝试使用它来监视内存使用情况。它会定期进行测量。做一个

man sar
Run Code Online (Sandbox Code Playgroud)

更多细节。我认为该选项是-r进行内存测量,-i指定您想要的间隔。


小智 5

我认为添加一个 crontab 条目就足够了

*/5 *  *  *  *  free -m >> some_output_file
Run Code Online (Sandbox Code Playgroud)

还有其他工具,如SeaLionNew RelicServer Density等,它们几乎可以做同样的事情,但更容易安装和配置。我最喜欢的是 SeaLion,因为它是免费的,而且它提供了一个很棒的常见 linux 命令原始输出的时间线视图。


小智 5

我非常喜欢记录所有内容,我发现了解哪些进程正在使用内存以及每个进程使用了​​多少(以及汇总统计信息)很有用。以下命令每 0.5 秒记录一次按内存消耗排序的顶部打印输出:

top -bd0.5 -o +%MEM > memory.log
Run Code Online (Sandbox Code Playgroud)

请注意,与仅存储总内存利用率统计信息相比,日志文件的增长速度会快得多,因此请确保不会耗尽磁盘空间。