我在 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