服务器 交换分区(Swap) 设置

周末的时候HBase集群一台子节点宕机,查看Ganglia及内存使用情况,发现节点Swap空间耗尽,但奇怪的是,系统物理内存却还是非常的富足。我们都知道

Swap空间的作用:

Swap空间的作用可简单描述为:当系统的物理内存不够用的时候,就需要将物理内存中的一部分空间释放出来,以供当前运行的程序使用。那些被释放的空间可能来自一些很长时间没有什么操作的程序,这些被释放的空间被临时保存到Swap空间中,等到那些程序要运行时,再从Swap中恢复保存的数据到内存中。这样,系统总是在物理内存不够时,才进行Swap交换。

Swap配置对性能的影响:

分配太多的Swap空间会浪费磁盘空间,而Swap空间太少,则系统会发生错误。 如果系统的物理内存用光了,系统就会跑得很慢,但仍能运行;如果Swap空间用光了,那么系统就会发生错误。例如,Web服务器能根据不同的请求数量衍生出多个服务进程(或线程),如果Swap空间用完,则服务进程无法启动,通常会出现“application is out of memory”的错误,严重时会造成服务进程的死锁。因此Swap空间的分配是很重要的。

那么,真的是当系统物理内存不够用的时候,系统才会使用Swap空间吗?否!他娘的。。。

其实虚拟内存并不是等到物理内存用尽了才使用的,是否尽量的使用或不使用swap在内核空间有一个参数控制。

cat /proc/sys/vm/swappiness
60

swappiness=0的时候表示最大限度使用物理内存,然后才是 swap空间,swappiness=100的时候表示积极的使用swap分区,并且把内存上的数据及时的搬运到swap空间里面。

对于现在动辄上百G物理内存的服务器来说,究竟为其Linux系统设置多大的交换分区合适呢,为此,引用红帽官方文库里的一段文字进行说明。

目前Red Hat推荐交换分区的大小应当与系统物理内存的大小保持线性比例关系。不过在小于2GB物理内存的系统中,交换分区大小应该设置为内存大小的两倍,如果内存大小多于2GB,交换分区大小应该是物理内存大小加上2GB。其原因在于,系统中的物理内存越大,对于内存的负荷可能也越大。
但是,如果物理内存大小扩展到数百GB,这样做就没什么意义了。
实际上,系统中交换分区的大小并不取决于物理内存的量,而是取决于系统中内存的负荷。Red Hat Enterprise Linux 5可以在这样的情况下工作:完全没有交换分区,而且系统中匿名内存页和共享内存页小于3/4的物理内存量。在这种情况下,系统会将匿名内存页和共享内存页锁定在物理内存中,而使用剩余的物理内存来缓冲文件系统数据(pagecache),当内存耗尽时,系统内核只会回收利用这些pagecache内存。
考虑到以下情况:
1)安装系统时难以确定内存的负荷,如何设置交换分区大小
2)系统中物理内存越大,所需交换分区就会越少
因此,在Red Hat Enterprise Linux 5中,以下是设置合适的交换分区大小的规则:
小于等于4G物理内存的系统,至少设置2GB的交换分区
4G~16G物理内存的系统,至少设置4GB的交换分区
16G~64G物理内存的系统,至少设置8GB的交换分区
64G~256G物理内存的系统,至少设置16GB的交换分区

如何修改呢?

1.修改此处vm.swappiness=10,但是你会发现重启后又变成60.

2.要彻底修改,还是要修改配置/etc/sysctl.conf
在这个文档的最后加上这样一行:
vm.swappiness=10
然后保存,重启。ok,你的设置就生效了。

 

涉及到HBase来说,其在系统配置一节中,也有建议,可见,HBase建议设置swappiness为0,尽量使用物理内存:

 

 

==================================

查看修改swap

==================================

1  查看swap 空间大小(总计): 
# free -m          默认单位为k, -m 单位为M
               total       used       free     shared    buffers     cached
Mem:           377         180        197        0         19        110
-/+ buffers/cache:         50         327
Swap:          572          0         572

2  查看swap 空间(file(s)/partition(s)):

   包括 文件 和 分区的详细信息

# swapon -s
等价于

# cat /proc/swaps


3.在空间合适处创建swap文件

  1. [root@ema usr]# cd swap  
  2. [root@ema swap]# dd if=/dev/zero of=swapfile bs=402400 count=10000  
  3. 10000+ records in  
  4. 10000+ records out  
  5. [root@ema swap]# ls -al  
  6. total 10024  
  7. drwxr-xr-x    2 root     root         4096    
  8. drwxr-xr-x   19 root     root         4096    
  9. -rw-r--r--    1 root     root     4013500000  
  10. [root@emaswap]# mkswap swapfile 
  11. 激活swap文件

swapon swapfile  

total       used       free     shared    buffers     cached  

Mem:          202619299771755

-/+ buffers/cache:        1661860

Swap:         40084008

 

原文地址:https://www.cnblogs.com/shitouer/p/2744518.html