如何诊断不断膨胀的OS X kernel_task和有线内存使用情况?


18

我有一个非常奇怪的问题,我很难对根本原因进行诊断。

我有一个Mac Pro(2008、8核2.8 GHz,8800GT)和14 GB的RAM(由于这个问题,最近进行了升级!)。

当我引导系统并登录时,vm_stat / top / Activity Monitor将显示kernel_task已分配了大约150 MB,而计算机已分配了大约800 MB的有线内存。

即使最初,800 MB似乎分配了很多有线内存,而没有运行任何应用程序-但是,情况变得更糟。(注意:有线已锁定,不可交换的内存)

在很短的时间后,有时是由启动终端之类的简单操作触发的,kernel_task将膨胀到8-900 MB的Real Mem(RSIZE),而Wired Memory将加速到1.6 GB(这意味着所有额外的内存请求都针对内核中的有线RAM)。

如果我退出所有内容(即:没有正在运行的应用程序,禁止活动监视器或终端查看顶部),则kernel_task RSIZE或有线内存使用率均不会显着降低。相反,向系统加载任务也表明有线内存不会减少-重要的是,它不会优先于大量交换而减少。

如果我注销并再次登录,它会减少一点(450 MB kernel_task,1.28 GB有线),但不会重新开始。

我没有运行任何古怪的kext秒-和futhermore,kextstat没有显示出巨大的内存分配出现; 最大的是com.apple.nvidia.nv50hal,其内存约为4 MB。

发生这种情况时,机器总体上感觉更加缓慢-毫不奇怪,因为如此大量的RAM被标记为不可分页。

所以我有几个问题:

1)有没有一种好的方法来诊断什么分配了所有此有线内存?它通常是kernel_task大小的2倍以上,不运行任何应用程序。实际的内存总数似乎并没有增加-似乎有一堆RAM并未在任何地方被占用。

2)发生什么情况导致内核突然需要6倍的内存?


Answers:


5

要调查为什么内核使用比平常更多的内存,可以使用其他工具。

  1. 运行活动监视器以检查哪些进程使用了​​最多的内存,因此它是一项kernel_task任务,而不是使用比平时更多的内存的其他任务(然后考虑将其杀死)。
  2. 在终端中运行,vm_stat 1以查看实时内存统计信息以及您的内存是否真的每秒增加。
  3. 运行fs_usage(以root用户身份)工具可以实时监视系统调用和页面错误。
  4. 要检查在终端中运行的多个进程的脏/匿名分配总和:

    sudo footprint -all -categories -swapped -collapseSharing
    

    它会收集内存信息,例如交换了多少(每个用户或内核内存)。

  5. 此外,如果您认为使用最多内存的是内核,请尝试以下zprint工具:

    sudo zprint -t -s | head -n20
    

    它将显示有关内核区域的信息

如果您想强制清除磁盘缓存(以释放一些内存),可以尝试:

sync && sudo purge

另请参阅:如何调查高内核任务内​​存使用情况?在AD SE


3

内核扩展只是在您不知道的情况下可由操作系统执行的众多众多代码片段之一。我有一个名为Python的小型实用程序,名为Consultant's Canary,可帮助您找到很多这样的实用程序:

如果那没有发现任何潜在的罪魁祸首,那么我想说的是从干净的安装启动,看能否在那儿重现问题。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.