Bas*_*Ben 7 memory osx-snow-leopard memory-leaks
我正在使用一台配备 8 GB RAM 的最新 MacBook Pro,在工作中使用它几个小时后,我注意到“活动”内存的数量在不断增长。
每当我重新启动 Mac 时,一切看起来都很好,而且几乎不使用任何 RAM。但几个小时后,它看起来像这样:

如您所见,在本例中大约为 4.3 GB。
作为开发人员,我知道“活动内存”是正在运行的进程当前使用的内存量。所以我做的第一件事就是退出所有应用程序并杀死所有似乎不属于 Mac OS X 的进程。
在我这样做之后,我的活动内存下降了大约 400 MB,但卡在了你在屏幕截图中看到的内容上。没有更多的进程或应用程序要退出。
现在我想知道到底是什么在保持记忆?top和活动监视器不报告任何具有高内存使用率的进程。
有任何想法吗?
谢谢!
感谢 Doug Harris 的回答,我制作了这张截图。它显示了 2.55 GB 系统范围的活动内存使用量,但该ps命令计算的内存使用量仅为 1.55 GB 。

我不确定 2.55 GB 的其余部分去了哪里或分配到哪里了。我安装了 Instruments,但由于这确实发生在几个小时的跨度内,因此很难使用 Instruments。这感觉就像操作系统中某处的内存泄漏。可能是驱动程序(尽管我没有安装任何内核扩展 - 使用 进行检查kextstat)。
我个人认为能够看到有关内存管理状态的“更多”信息会很有趣。在 Linux 下,“/proc”下有一些信息可用,afaik。
尽管没有一个进程的内存使用率很高,但仍然有很多进程在运行——所有这些加起来。
使用ps和其他命令行工具,您可以更深入地研究这一点。
首先,使用选项来ps限制仅显示常驻内存和命令名称。-m按内存使用情况对输出进行排序,-a显示所有用户的进程,-x显示与终端无关的进程(即大多数 Mac 应用程序)。
$ ps -axm -o "rss,comm"
Run Code Online (Sandbox Code Playgroud)
这是我看到的前几行:
RSS COMM
210256 /Applications/Firefox.app/Contents/MacOS/firefox-bin
158276 /Applications/Google Chrome.app/Contents/MacOS/Google Chrome
155360 /Applications/iTunes.app/Contents/MacOS/iTunes
Run Code Online (Sandbox Code Playgroud)
对于这些位于顶部(并且显示的 Chrome 进程只是其中之一),我并不感到惊讶。RSS 列表示为 1024 字节块。因此 iTunes 使用了大约 151.7 MB。
该输出的格式足够好,如果您喜欢以这种方式分析事物,您可以将其放入电子表格中进行分析。我会坚持使用命令行一段时间
再串起来看看所有进程的总和:
$ ps -axm -o "rss,comm" | awk 'BEGIN { s=0;}; {s=s+$1;}; END { printf("%.2f GB\n", (s/1024.0/1024));}'
Run Code Online (Sandbox Code Playgroud)
我看到的输出2.44 GB并不完全是我在活动监视器中看到的活动内存,但足够接近,我可以使用 ps 来了解这一点。
您可以将那些使用超过 100MB 的进程加在一起:
$ ps -axm -o "rss,comm" | awk 'BEGIN { c=0;s=0;}; ($1 > 100000) {c=c+1;s=s+$1;}; END { printf("%.2f GB from %d processes\n", (s/1024.0/1024),c);}'
0.98 GB from 8 processes
Run Code Online (Sandbox Code Playgroud)
我没有告诉您具体是什么在使用您的 Mac 内存,但这些工具将帮助您发现。
| 归档时间: |
|
| 查看次数: |
10656 次 |
| 最近记录: |