我发起了一些耗费大量内存的东西,现在一切都落后了。 我想所有的应用程序的内存已经交换,以释放内存密集型进程的一些空间,现在一切都慢慢返回到内存访问时。
有没有办法显式地将所有可能的东西从交换回RAM? 或者,也许不是一切,只是一些特定的stream程数据?
我build议允许正常的Linux内存控制交换在实际使用的东西,因为它们被使用。
我能想到的唯一的事情就是closures掉,然后再打开
swapoff -a swapon -a
这假定你有足够的备用物理内存来包含交换中的所有内容。
你可以调整它在0到100之间的一些数字到/proc/sys/vm/swappiness
。
这个控制用来定义内核交换内存页面的方式。 较高的值会增加攻击性, 较低的值会降低交换量 。 值为0将指示内核不启动交换,直到空闲和文件支持的页面数量小于区域中的高水位标记为止。
默认值是60。
Linux在pipe理内存方面做得很好,你不应该站在原地。 vm.swappiness设置(前面提到)并不妨碍。 你更有可能遇到奇怪的问题做任何事情。
你发起的是什么内存饥饿? 可以调整吗? 如果它没有自己的内存限制指令,你也可以看看ulimit。
如果你有所有的应用程序的内存,可以将swappiness设置为0,这样事情就不会换掉。 例如,qemu-kvm是VMM被换出的一个大目标,因为大多数时候它“看起来”是空闲的。 我已经看到一个qemu-kvm内存的80%的内存被写入交换。 运行在qemu-kvm上的虚拟机将会变得几乎没有响应,因为它们没有交换(尽pipeguest虚拟机不知道发生这种情况)。 来宾虚拟机会认为它的performance最优秀,尽pipe事实上它拖得很厉害。 当我的一堆虚拟机“醒来”开始做事时,即使在拥有足够快速内存和磁盘的企业级硬件上,也可以将平均负载高达30以上。 我想这是一个开箱即用的qemu-kvmdevise的失败。
希望这有助于某人。
如果你能够重新启动应该这样做的系统(并且可能花费比尝试其他解决schemeless得多的时间)。
从这个问题复制我的一些答案。
这样你就知道swappiness可调参数是如何工作的 这是通过告诉VM子系统在映射到进程页面表的内存的百分比+ swappiness值大于100时寻找要交换的页面来实现的。因此,设置为60将导致系统开始从进程页表中调出过时的页面当它使用超过40%的系统内存。 如果你想允许你的程序使用更多的内存而不是以caching为代价,那么你就需要降低swappiness的值。
我build议不要试图想出内核中的VM子系统。 你实际上有足够的信息来做出更好的决定是极不可能的。 如果你以某种方式强迫它做错事,那么你最终会让事情变得更慢。
该过程仍在运行? 打开一个terminal,看看是否可以发现已启动的进程。 (ps aux | grep processname可能会让它更简单一些)如果kill -9 PID仍在运行,可以closures它们。 小心你杀了什么。 如果你不知道这个过程是什么,不要杀了它! 另外,发布免费-m的输出,以便我们可以看到你是否还在使用大量的交换。
如果事情进展缓慢,你可能仍然有任何你启动仍在运行。 除非你真的知道你在做什么,或者你喜欢住在边缘,否则我绝不会把这个交换关掉。 =)
我相信没有任何真正好的办法来迫使Linux将数据从磁盘转移到内存。 当swapoff / swapon是一个工作的解决scheme,但它很脏,很容易可以使你的系统不稳定。 对于在交换中有更多数据而不是空闲内存的情况,很难想象Linux可以使用什么有效策略来决定哪些数据移动到内存中,哪些数据保存在磁盘上。
总结:让Linux以正常方式逐渐恢复其性能。 它的虚拟机子系统是这样组织的,它努力并不断地移动到一个理想的平衡状态。
如果你想清空它们,你可以使用这个命令链。
$ free && sync && echo 3 > /proc/sys/vm/drop_caches && free total used free shared buffers cached Mem: 1018916 980832 38084 0 46924 355764 -/+ buffers/cache: 578144 440772 Swap: 2064376 128 2064248 total used free shared buffers cached Mem: 1018916 685008 333908 0 224 108252 -/+ buffers/cache: 576532 442384 Swap: 2064376 128 2064248
您可以通过将数字参数更改为上述命令来指示Linux内核放弃caching项目的各个方面。
注意:清理不必要的东西(内核2.6.16或更新版本)的内存。 始终确保首先运行同步刷新有用的东西到磁盘!
释放页面caching:
$ echo 1 > /proc/sys/vm/drop_caches
释放dentries和inode:
$ echo 2 > /proc/sys/vm/drop_caches
要释放页面caching,dentries和inode:
$ echo 3 > /proc/sys/vm/drop_caches
以上是为了以root身份运行。 如果你正在尝试使用sudo来做这些事情,那么你需要稍微改变一下这样的语法:
$ sudo sh -c 'echo 1 >/proc/sys/vm/drop_caches' $ sudo sh -c 'echo 2 >/proc/sys/vm/drop_caches' $ sudo sh -c 'echo 3 >/proc/sys/vm/drop_caches'