内容简介
本文将介绍如何在有足够内存空间的情况下,希望将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?