如何记录应用程序在 OS X 上使用的内存量

如何记录应用程序在 OS X 上使用的内存量

我在 Mac Mini 上安装了 OS X 10.8.2。我是一名应用程序开发人员,但在这种情况下,我正在用 C++ 构建应用程序,所以我不能使用 Xcode 来解决这个问题。我想跟踪我的应用程序使用了多少内存,但我不想手动记录它。我该怎么做。

更多信息:我想全天记录。我会让应用程序全天运行,这样我就可以比较内存中的峰值。我并不反对第三方应用程序,只要它们可靠即可。谢谢。

答案1

您应该能够使用标准ps命令来执行此操作。来自man ps

%mem        %MEM      ratio of the process's resident set size  to the physical
                      memory on the machine, expressed as a percentage.  

rss         RSS       resident set size, the non-swapped physical memory that 
                      a task has used (inkiloBytes). 

vsz         VSZ       virtual memory size of the process in KiB (1024byte units).
                      Device mappings are currently excluded; this is subject
                      to change. 

您唯一需要的其他详细信息是进程的 PID。因此,如果您的应用程序名为 myApp,您可以像这样获取 PID:

ps x | grep myApp

打印如下列表:

15909 pts/3    S      0:37 myApp
22583 pts/6    S+     0:00 grep --color myApp

第一列是进程 ID (PID)。现在,如果你想自动执行此操作,则需要跳过包含 grep 命令的行并将输出保存在 BASH 变量中:

pid=$(ps x | grep myApp | grep -v grep | awk '{print $1}')

awk部分使命令仅打印第一个字段,即 PID。


您可以将所有这些放在一起放入一个行中,该行将每分钟应用程序的内存使用情况保存到一个名为的文件中memlog.txt

while sleep 60; do \
    pid=$(ps x | grep myApp | grep -v grep | awk '{print $1}') && \
    ps xo pid,rss,vsz,%mem | grep "$pid" >> memlog.txt ; \
done 
  • while sleep 60导致 bash 无限循环运行,每次循环之间等待 60 秒
  • sleep 60告诉它等待 60 秒。如果您需要更频繁地更新,请更改此值。

最终的输出结果是一个memlog.txt包含 4 列的文件 ( ):应用的 PID、常驻集大小、虚拟内存大小和内存百分比。例如:

4166 25240 633028  0.3
4166 25240 633028  0.3
4166 25240 633028  0.3

这可以轻松扩展以包括 CPU 使用率和每次测量的时间。例如,要包括时间:

while sleep 60; do \
    date=$(date +%D" "%H:%M:%S);
    echo -n "$date : " >> memlog.txt;
    pid=$(ps x | grep myApp | grep -v grep | awk '{print $1}') && \
    ps xo pid,rss,vsz,%mem | grep "$pid" >> memlog.txt; \
done 

相关内容