在 Mac OS X Yosemite 10.10.5 上,当我尝试运行需要分配和使用 128 GB 内存的计算(它是一个用 C 编写的命令行程序)时,内核以极端的偏见杀死了我的进程。此控制台日志条目是一个实例的示例:
15 年 9 月 25 日 7:08:40.000 PM 内核 [0]:低交换:杀死 pid 6202 (huffgrp)
当它分配和使用 64 GB 内存时,计算工作正常并且在合理的时间内。我的 Mac 有 32 GB 的 RAM 和硬盘驱动器上的 Beaucoup 空间。我也在另一台具有 8 GB RAM 的 Mac 上尝试过这个,64 GB 的计算也运行良好,当然需要更长的时间,但 128 GB 的计算以相同的方式被内核杀死。
顺便说一句,malloc()无论我要求多少空间,都永远不会返回错误。内核只会在进程实际使用过多内存时终止该进程,从而导致大量交换到硬盘驱动器。
所以似乎有一个秘密交换空间限制在 64 GB 和 128 GB 之间。
我的问题是:如何重新配置内核以允许更多交换空间?我找到了一个很有前途的文件,/System/Library/LaunchDaemons/com.apple.dynamic_pager.plist但我没有看到里面的秘密号码。手册页dynamic_pager说它所做的只是设置交换文件的名称和位置。同一个手册页有一个旧版本,它记录了一个-S选项来设置创建的交换文件的大小。我试过了,请求 160 GB 交换文件,但没有效果。每个交换文件仍然是 1 GB,并且该进程仍然被内核杀死。
通常通配符扩展不包括点文件:
% echo *
Applications Desktop Documents Downloads Library Movies Music Pictures Public bin
Run Code Online (Sandbox Code Playgroud)
如果我明确要求点文件,我会得到它们:
% echo * .*
Applications Desktop Documents Downloads Library Movies Music Pictures Public bin . .. .CFUserTextEncoding .DS_Store .Trash .adobe .bash_history .cups .gitconfig .gnupg .history .lesshst .netbeans .scanview.cfg .sqlite_history .ssh .swt .systemmodeler .tcshrc .viminfo
Run Code Online (Sandbox Code Playgroud)
但是我也得到.和..。我不想要那些,例如,如果我传递到du -s我想要目录中每个项目的大小的地方。是否有一些模式可以让我知道当前目录中的内容,以及当前目录中没有.和的所有内容..?
我使用 tcsh。
(关于“这个问题在这里可能已经有答案:”上面的注释:不,这个问题在那里没有答案,因为该答案仅适用于 bash。)