「Linux」- 将SWAP写回MEMORY中

内容简介

本文将介绍如何在有足够内存空间的情况下,希望将SWAP分区中的数据读回内存。

问题描述

当执行「占用大量内存的程序」时,「其他应用程序」所占用的内存就会被写入SWAP分区。当需要执行这些「其他应用程序」的时候,内核会把SWAP分区中的数据“换”回内存,受到磁盘IO的影响,应用程序的响应可能会比较慢。

当我们关闭「占用大量内存的程序」时,内存资源被释放,但是之前“换入”SWAP分区的数据并不会被重新“换回”内存中。

我们的诉求是:当有足够内存空间的情况下,希望将SWAP分区中的数据读回内存。

解决办法

但这样做的前提是:你有足够的备用物理内存来包含SWAP中的所有内容,否则内核将启动致命的OOM Killer功能。

需要将这些SWAP中的数据写回到内存中,这一执行如下命令:

#!/bin/sh

swapoff -a
swapon -a

当关闭交换分区时,数据会被读回内容,然后我们再重新打开交换分区。

相关链接

如果你希望将SWAP的内容复制回内存,但是保留SWAP的内容,可以参考「Making Linux read swap back into memory」一文。

参考文献

Making Linux read swap back into memory
Linux: how to explicitly unswap everything possible?
How do I read from /proc/$pid/mem under Linux?