zoukankan      html  css  js  c++  java
  • 服务器 交换分区(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

     

  • 相关阅读:
    spring autoWire注解
    spring利用注解来注册bean到容器
    spring的两种属性注入方式setter注入和构造器注入或者自动注入
    嵌套对象
    Effective C++:规定12:不要忘了复制的对象时,它的每一个组成部分
    eclipse如何查看类之间的引用关系
    JavaScript权威指南科20章 client记忆
    IDL 自己定义功能
    2015学校的书面总结招募书面采访蓝汛通信算法
    用百度API实现热(WIFI)、GPS、基站定位
  • 原文地址:https://www.cnblogs.com/shitouer/p/2744518.html
Copyright © 2011-2022 走看看