我在 4GB RAM 的 Macbook Pro(型号 8,1)上运行 SL。目前我有仅有的iTerm2、QuickSilver 和 Activity Monitor 正在运行(后台还有几个守护进程,例如 Dropbox 和 Citations,它们使用的内存都不超过 20-30 MB)。当我检查内存使用情况时,它显示 900+ MB Wired
,而 几乎是 1 GB Active
。
检查了“我的进程”列表,顶部进程似乎占用了 60-70 MB。如果我按层次列出所有进程,我会发现kernel_task
哪些进程占用了大约 350 MB。不用说,这非常奇怪。
作为一个偏执狂,我开始怀疑是否有一些隐藏的恶意软件在幕后消耗资源。有没有办法检查?否则,这种无法解释的高内存使用率可能是什么原因造成的?
答案1
作为您的用户,您只能在 OSX 中看到您的 launchd bootstrap。您位于 Aqua 域中。因此,要查看因您而运行的所有内容:
launchctl list
将显示已加载的内容。但这还不是全部。它launchctl
有许多选项,例如:
bslist [PID | ..] [-j]
This prints out Mach bootstrap services and their respective
states. While the namespace appears flat, it is in fact hierar-
chical, thus allowing for certain services to be only available
to a subset of processes. The three states a service can be in
are active ("A"), inactive ("I") and on-demand ("D").
If [PID] is specified, print the Mach bootstrap services avail-
able to that PID. If [..] is specified, print the Mach bootstrap
services available in the parent of the current bootstrap. Note
that in Mac OS X v10.6, the per-user Mach bootstrap namespace is
flat, so you will only see a different set of services in a per-
user bootstrap if you are in an explicitly-created bootstrap
subset.
If [-j] is specified, each service name will be followed by the
name of the job which registered it.
因此,作为你的用户:
launchctl bslist -j
将为您提供当前加载到 launchd 中的所有内容,任何实际运行的内容旁边都会有一个“A”。
...
A com.apple.cookied (com.apple.cookied)
D com.apple.coreservices.quarantine-resolver (com.apple.coreservices.uiagent)
此处 cookied(wtf?)正在运行。下面,隔离解析器已加载,但实际上并未运行。
现在,也许你可能倾向于尝试类似以下的事情:
sudo launchctl list
以为作为 root,您将看到一切。不是的。Root 位于系统域中,无法真正清楚地看到您。您将在系统或守护进程域中运行程序。
阅读手册页,你会发现:
sudo launchctl bstree -j # This should show you everything.
ps au
该命令为您提供系统上运行的整个 Mach Tree。
活动监视器会显示一些内容,但是我并不喜欢依赖它。
参考:
http://developer.apple.com/library/mac/#technotes/tn2083/_index.html