代码之家  ›  专栏  ›  技术社区  ›  bialix

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

  •  33
  • bialix  · 技术社区  · 15 年前

    是否有现成的解决方案来记录系统启动时的内存消耗?我想把数据记录到简单的文本文件或一些数据库中,以便以后分析。

    我正在开发基于Linux2.4的嵌入式系统。我需要调试与内存消耗相关的问题。我的应用程序在每次系统启动时自动启动。我需要从固定的时间间隔(尽可能经常)中获取带有时间戳的数据的方法,这样我就可以跟踪问题。

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

    6 回复  |  直到 6 年前
        1
  •  30
  •   Gunther Piez    15 年前

    像这样的小剧本

    rm memory.log
    while true; do free >> memory.log; sleep 1; done
    
        2
  •  20
  •   klaus se    8 年前

    下面的脚本打印时间戳和标题。

    #!/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
    

    输出如下(在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
    
        3
  •  4
  •   Classified    12 年前

    有个节目叫

    sar
    

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

    man sar
    

    了解更多详细信息。我认为选项是-r,用于进行内存测量,-i指定您想要的间隔。

        4
  •  4
  •   stylusbrook    11 年前

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

    */5 *  *  *  *  free -m >> some_output_file
    

    还有其他工具,比如 SeaLion , New Relic ,请 Server Density 这样做几乎是一样的,但更容易安装和配置。我最喜欢的是Sealion,因为它是免费的,而且它提供了一个关于普通Linux命令原始输出的很棒的时间轴视图。

        5
  •  2
  •   Steve B.    15 年前

    你可以放一些像

    vmstat X >> mylogfile
    

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

        6
  •  0
  •   Stephen Rauch Eugen    6 年前

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

    top -bd0.5 -o +%MEM > memory.log
    

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