20 memory mac kernel virtual-memory macos
我有一个非常奇怪的问题,我很难诊断出根本原因。
我有一台Mac Pro(2008 年,8 核 2.8 GHz,8800GT)和 14 GB 内存(最近因为这个问题升级了!)。
当我启动系统并登录时,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 s - 而且,kextstat 显示那里没有巨大的内存分配;最大的是 com.apple.nvidia.nv50hal,内存约为 4 MB。
发生这种情况时,机器总体上感觉更加缓慢 - 不足为奇,因为如此大量的 RAM 已被标记为不可分页。
所以我有几个问题:
1)有没有一种好方法来诊断分配了所有这些有线内存的内容?它通常是 kernel_task 大小的 2 倍以上,不运行任何应用程序。实际内存总量似乎没有加起来 - 似乎有一堆 RAM 没有被计算在内。
2) 发生了什么导致内核突然需要 6 倍的内存?
要调查内核使用比平时更多的内存的原因,您可以使用不同的工具。
kernel_task不是任何其他使用比平时更多内存的任务(然后考虑终止它)。vm_stat 1以查看实时内存统计信息,以及您的内存是否真的每秒都在增加。fs_usage(以 root 身份)工具来实时监控系统调用和页面错误。要检查在终端中运行的多个进程的脏/匿名分配的总和:
sudo footprint -all -categories -swapped -collapseSharing
Run Code Online (Sandbox Code Playgroud)
它将收集内存信息,例如交换了多少(每个用户或内核内存)。
此外,如果您认为使用最多内存的是内核,请尝试使用zprint工具:
sudo zprint -t -s | head -n20
Run Code Online (Sandbox Code Playgroud)
它将显示有关内核区域的信息
如果您想强制清除磁盘缓存(以释放一些内存),您可以尝试:
sync && sudo purge
Run Code Online (Sandbox Code Playgroud)
另请参阅:如何调查高内核任务内存使用情况?在 AD SE
| 归档时间: |
|
| 查看次数: |
14636 次 |
| 最近记录: |