|
发表于 2009-2-24 16:34:26
|
显示全部楼层
Post by poet;1951920
我认为建立多大swap 关键不在于你有多少内存,而在于针对内存耗尽时你做出的反应。
缺省情况下,内核会杀掉内存不足时仍然在申请内存的进程,因此 Linux 下的 malloc() 函数永远不会返回 NULL。
(有多少 Linux 程序员知道这个事实? Linux 下的 malloc 永远不会返回 NULL。。。)
但是有的时候,内存需要一个缓冲,毕竟临时会需要大量内存。这个时候给1G到2G的交换是合适的。
如果大量的交换都被占用,这个时候你的系统如何进行?你有两个方案:
1。任由内存耗尽,内核此时会试图杀掉内存不足的进程。
2。提供足够大的交换空间,此时整个系统会耗费大量的资源在真实内存/虚拟内存交换上面,系统变得非常慢。
你的选择变成了:你需要杀掉一部分进程,还是任由系统变得缓慢?
对于实际的应用服务器来说,“服务不可”是一件非常显然的事情,很容易因此而激活备份服务器,或者使用监控进程让关键服务重启。但是“服务器很慢”并不是一件非常显然的事情,此时就算 ssh 上去都变得很艰难。解决问题也很难,你也无法监控这件事情的存在,毕竟程序对于“系统慢”这种fuzzylogic的事情是很难判断的。
那么我的建议是:不论你有多大内存,都不要创建超过2G的swap。对于关键性服务器或者配备了负载均衡的服务器而言,甚至可以考虑不创建swap。
精华,我要好好思考一下这个重点:Swap用来做什么。 |
|