我已经使用unix一段时间了,在最近几年中,我觉得交换是不合时宜的,但是我很好奇其他人的想法。
我的说法大致是这样(假设没有全局ulimit或OOM设置的混乱):
There is little value in swap because if you need to swap out to disk,
odds are it's going to be a vicious cycle where an app will continue
to eat not only real memory, but swap as well until it gets OOM
reaped (_if_ it gets OOM reaped).
If you have swap enabled, it will only prolong this death march to
the detriment of other processes - and in the worst case where the
process is not OOM reaped in a timely manner, grind the system to
a halt.
Without swap, it will probably get OOM reaped sooner (if at all)
对于任何针对性能进行了调整的服务,我认为了解其资源使用的上限对于首先进行调整至关重要,在这种情况下,您便知道需要多少资源。
我无法想象在许多情况下(某些但不是很多),您会挂起正在运行的进程,并且该进程可能会交换以腾出空间来容纳其他事物,但是如果这样做,您仍然会丢失套接字,因此强制执行通过gcc进行核心转储或手动复制内存在功能上是等效的。
我绝对不希望在嵌入式系统上进行交换(即使它可能具有较小的可用RAM),如果用完了RAM,我宁愿让我的进程死掉,也不愿破坏每扇区一百万个写入的闪存在整个周末内将各个行业的平均水平降至平均水平。
那里有没有胡须的人有充分的理由进行互换?
更新答案和分析:
确认?-fork()对于子进程需要与父进程相同的内存量
现代的fork()通常是在POSIX 上用于子代的写时复制,但是专门针对Linux和FreeBSD,我通过推断来假设OSX。我认为这是随身携带的过时行李的一部分。
奇怪的是,这篇Solaris文章声称,即使Solaris通过fork()使用写时复制功能,您也应该在空闲虚拟内存中至少有2x(!)的父进程大小,以使fork()不会被废除。中间。尽管Solaris元素在某种程度上消除了交换是不合时宜的说法,但我认为,足够多的操作系统正确地实现CoW的方式是,消除神话比将其标记为交换的进一步理由更为重要。以来。面对现实吧。此时,实际使用Solaris的人可能只是Oracle。没有冒犯Solaris!
确认 -当tmpfs / ramfs填满时,tmpfs / ramfs文件可以方便地交换
不要使用无限制的tmpfs / ramfs!始终明确定义要tmpfs / ramfs使用的ram数量。
可能 -稍作交换以防万一
我的一位老老板曾经说过一句好话,“你不知道你不知道什么”-本质上,你无法根据尚未掌握的信息做出决定。这是交换给我的一个合理的论点,但是-我怀疑您要检测应用程序是否交换出的内容比检查malloc()是否成功或从中捕获异常要重得多。失败的new()。
如果您正在运行台式机并且发生了许多随机事件,这可能会很有用,但是即使如此-如果出现问题,我还是希望OOM能够收获而不是陷入掉地狱的境地。这就是我。
BUS!-在Solaris上,由于以下几个原因,交换很重要
tmpfs-状态tmpfs 可用的可用空间量取决于系统中未分配的交换空间量。tmpfs文件系统的大小会增加以容纳写入其中的文件,但是对于tmpfs的大量用户来说,存在一些固有的折衷。Tmpfs与执行程序的数据段和堆栈段共享资源。如果tmpfs文件系统接近其最大允许大小,则可能会影响大型程序的执行。Tmpfs可以自由分配系统的4MB交换空间以外的所有空间。
关于交换的Solaris事实和神话 -状态当今的虚拟内存由物理RAM和磁盘上交换空间的总和组成。Solaris根本不需要配置任何交换空间。如果选择此选项,则RAM装满后,将无法启动新进程。。
我不确定这是否意味着您可以创建的最大虚拟地图是ram + swap,还是仍然可以像mmap()这样的文件来做比ram大的文件,并依靠mmap()的延迟初始化。可以在没有交换的情况下很好地运行Solaris,这似乎不如其他POSIXy操作系统友好。
BUS!流行的Linux休眠工具似乎依赖于交换
默认情况下,尽管存在其他后端,TuxOnIce看起来像依靠交换进行休眠。但是,如果您没有运行需要休眠的机器,我仍然会支持“交换在Linux上是古旧的”的说法。