我应该如何决定在具有 2-4 GB RAM 的新 Linux 机器 (Debian) 上进行交换的大小?我真的需要交换空间吗?
我发现有时我的 Linux 机器内存不足,它开始拆除随机进程来处理它。
我很好奇管理员如何避免这种情况?是增加内存量的唯一真正解决方案(单独增加交换会有所帮助吗?),还是有更好的方法来设置带有软件的盒子来避免这种情况?(即配额,或一些这样的?)。
在 2.6.31-302 x86-64 内核上运行 Ubuntu。总体问题是我在“缓存”类别中的内存不断增加,即使我们的应用程序需要它也不会被释放或使用。
所以这就是我从“免费”命令中得到的。乍一看,这些都没有异常。
# free
total used free shared buffers cached
Mem: 7358492 5750320 1608172 0 7848 1443820
-/+ buffers/cache: 4298652 3059840
Swap: 0 0 0
Run Code Online (Sandbox Code Playgroud)
有人会说的第一件事是“别担心,Linux 会自动管理该内存。” 是的,我知道内存管理器应该如何工作;问题是它没有做正确的事情。此处“缓存”的 1.4 GB 似乎已保留且无法使用。
我对 Linux 的了解告诉我 3 GB 是“免费的”;但系统的行为则不然。当 1.6 GB 的实际空闲内存在使用高峰期用完时,一旦需要更多内存(并且第一列中的“空闲”接近 0),就会调用 OOM 杀手,进程被杀死,并且问题开始出现即使-/+ 缓冲区/缓存行中的“空闲”仍然有大约 1.4 GB 的“空闲”。
我已经调整了关键进程的 oom_adj 值,所以它不会使系统陷入困境,但即使如此,重要的进程也会被杀死,我们永远不想达到那个点。特别是当理论上 1.4GB 仍然是“免费的”时,如果它只会驱逐磁盘缓存。
有谁知道这里发生了什么?互联网上充斥着关于 Linux 'free' 命令和“为什么我没有任何可用内存”的愚蠢问题,因此我找不到关于这个问题的任何信息。
我脑海中浮现的第一件事是交换已关闭。我们有一个坚定不移的系统管理员;如果他们得到支持,我愿意接受解释。这会导致问题吗?
运行后这里是免费的echo 3 > /proc/sys/vm/drop_caches:
# free
total used free shared buffers cached
Mem: 7358492 5731688 …Run Code Online (Sandbox Code Playgroud) 在 VMware ESX 设置中,这些选项有何不同?:
我的意思是,在这两种情况下都使用了交换;
那么给 Linux VM 的交换分区有什么意义吗?
我有一台带有 4GB 内存的核心 2 笔记本电脑。我用这台机器浏览、上网和简单的编程。(我偶尔使用这台机器来托管一个小型的 ftp 和 web 服务器。)
拥有交换分区有什么好处吗?我的理解是,有了这么多内存,我的平庸使用就不需要交换了。其实内核会强制使用我的ram,这样会更快。
这样对吗?
linux ×5
memory ×2
swap ×2
debian ×1
disk-cache ×1
low-memory ×1
memory-usage ×1
vmware-esx ×1
vmware-esxi ×1
windows ×1