交换空间已满,但没有任何东西进出交换空间

交换空间已满,但没有任何东西进出交换空间

我运行了一项超出内存的作业,并开始写入交换区。交换空间为 25 GB,RAM 为 1TB。

当交换区已满直到 11GB 时,我已经停止了工作,所以其中 50% 仍然是空的。

它没有触发任何 OOM 终止作业,因此一切都像发生之前一样正常。

我现在只使用了 8GB 交换空间(在我停止工作后清理了 3GB),并且它正在慢慢减少。但是当我检查时vmstat, 和si都是so0所以没有任何东西进出交换?这怎么可能?

free -lm
              total        used        free      shared  buff/cache   available
Mem:        1031757      475637       49100          63      507019      553720
Low:        1031757      982657       49100
High:             0           0           0
Swap:         25767        8272       17495

我有一个可用空间40GBin ,那么我是否应该期望我正在运行的作业不会现在而是稍后RAM被杀死?使用的空间比可用空间小,所以看起来不错,但我不确定是否仍然告诉它不会被触发。OOM8GBswap40GBRAMOOM

几个月前,当OOM触发时,它杀死了我所有的工作,并且使用的交换空间25GB(全部已满),然后 10 分钟后0GB。然而,在这种情况下,需要一天的时间来清理2-3 GBswap. 这对我正在运行的作业来说是坏消息吗?

您是否认为我正在运行的作业有被杀死的危险,不是现在,而是稍后,当可用交换空间达到时,0 GB它会触发OOM杀死?如果是这样的话,我该如何防止这种情况发生呢?

我将不胜感激任何帮助。

答案1

vmstat不带参数显示重启后的平均值。由于换入/换出显示为块/秒,如果您有合理的正常运行时间,那么这些显示 0 并不奇怪。

现在交换中的内存都是正在使用的内存,但由于进程的内存过载而被换出后就不再使用了。这实际上是一件好事,因为许多进程具有仅在启动期间使用的内存。将其换出意味着您有更多可用 RAM 可用于进程和缓冲区/缓存。

原因是在前面的情况下,当你做过发生 OOM,之后所有交换空间在事件发生后不久再次释放,可能是因为导致 OOM 的进程已使用所有空间,并且在停止后所有交换空间再次释放。

唯一发生 OOM 的情况是没有可用的交换空间,并且没有可用的 RAM(考虑到缓冲区/缓存,即命令的“可用”列free)。

对于其余的事情,您通常可以相信 Linux 的内存管理会做正确的事情。仅当您由于正在运行的负载/应用程序的类型而确实有特殊要求时,才有必要开始调整内存管理。

相关内容