-
Notifications
You must be signed in to change notification settings - Fork 0
66 vm.swappiness为0时RAM满额造成的问题
supperxin edited this page Oct 25, 2017
·
1 revision
最近在对部署在Linux Server的Web做压测时,发现当内存用尽时,系统会变得几乎无法响应,检查过后发现有大量的IO读操作。
经过一段时间后恢复响应
当vm.swappiness=0时这种现象很容易重现。
这篇文章的作者做了一个实验,当Linux的内存溢出时会发生什么?
http://pminkov.github.io/blog/what-happens-when-you-run-out-of-memory-in-linux.html
我们的许多进程都是位于磁盘上的可执行文件。当内核执行它们时,它必须读取指令。
如果有足够的缓冲区缓存,我们可以将这些指令存储在内存中,而不必再读取它们。
然而,我们的缓冲区缓存现在很小。所以当进程运行时,内核需要从磁盘中拉出指令,它可能将它们存储在缓冲区高速缓存中,但是当下一个进程正在运行时,它会尝试再次存储在缓存中,并将旧流程中存储的内容逐出。
所以这种情况下会造成大量的IO读取操作。
可以通过设定swap来解决。
当设定swap之后,内核会分配更多的内存给高速缓冲区,这样就不会重复 清空缓存 -> 读取指令 -> 存入高速缓存区 的循环。
设定swap可以参考:http://www.cnblogs.com/windchen/p/6261725.html
PS. 1G内存建议设定为10,2G为5