zoukankan      html  css  js  c++  java
  • Linux记录-Linux Swap分区虚拟内存相关解决方案

    Swap用途:Swap意思是交换分区,通常我们说的虚拟内存,是从硬盘中划分出的一个分区。当物理内存不够用的时候,
    内核就会释放缓存区(buffers/cache)里一些长时间不用的程序,然后将这些程序临时放到Swap中,
    也就是说如果物理内存和缓存区内存不够用的时候,才会用到Swap。
    swap清理:swapoff -a && swapon -a
    注意:这样清理有个前提条件,空闲的内存必须比已经使用的swap空间大
    --------------------------------------------------------------------------------------------------------------------------------------------------------------
    1.Linux如何查看哪个进程占用的SWAP分区比较多
    ##for i in $(ls /proc | grep "^[0-9]" | awk '$0>100'); do awk '/Swap:/{a=a+$2}END{print '"$i"',a/1024"M"}' /proc/$i/smaps;done| sort -k2nr | head
    ##ps aux | grep ${pid}
    --------------------------------------------------------------------------------------------------------------------------------------------------------------
    2.释放linux的swap内存
    第一步:先执行sync命令
    #sync
    sync命令用于强制被改变的内容立刻写入磁盘,更新超块信息,以防止释放,sync命令则可用来强制将内存缓冲区中的数据立即写入磁盘中。
    第二步:(如果仅仅是清理swap的话,这一步可以不执行)

    #echo 3 > /proc/sys/vm/drop_caches 此指令输入立即生效,意在释放所有缓存。
    #cat /proc/sys/vm/drop_caches
    --------------------------------------------------------------------------------------------------------------------------------------------------------------
    0 – 不释放
    1 – 释放页缓存 ##echo 1 > /proc/sys/vm/drop_caches 或者 # sysctl -w vm.drop_caches=1
    2 – 释放dentries(目录缓存)和inodes ##echo 2 > /proc/sys/vm/drop_caches 或者 # sysctl -w vm.drop_caches=2
    3 – 释放所有缓存 ##echo 3 > /proc/sys/vm/drop_caches 或者 # sysctl -w vm.drop_caches=3

    以上三种方式都是临时释放缓存的方法,要想永久释放缓存,需要在/etc/sysctl.conf文件中配置:vm.drop_caches=1/2/3,然后sysctl -p生效即可!
    可以使用sync命令来清理文件系统缓存,还会清理僵尸(zombie)对象和它们占用的内存
    温馨提示:
    上面操作在大多数情况下都不会对系统造成伤害,只会有助于释放不用的内存。
    但是如果在执行这些操作时正在写数据,那么实际上在数据到达磁盘之前就将它从文件缓存中清除掉了,这可能会造成很不好的影响。
    那么如果避免这种事情发生呢?
    因此,这里不得不提一下/proc/sys/vm/vfs_cache_pressure这个文件,告诉内核,当清理inoe/dentry缓存时应该用什么样的优先级。
    #cat /proc/sys/vm/vfs_cache_pressure
    100
    vfs_cache_pressure=100 这个是默认值,内核会尝试重新声明dentries和inodes,并采用一种相对于页面缓存和交换缓存比较"合理"的比例。
    减少vfs_cache_pressure的值,会导致内核倾向于保留dentry和inode缓存。
    增加vfs_cache_pressure的值,(即超过100时),则会导致内核倾向于重新声明dentries和inodes
    总之,vfs_cache_pressure的值:小于100的值不会导致缓存的大量减少,超过100的值则会告诉内核你希望以高优先级来清理缓存。
    其实无论vfs_cache_pressure的值采用什么值,内核清理缓存的速度都是比较低的。
    如果将此值设置为10000,系统将会将缓存减少到一个合理的水平。
    -------------------------------------------------------------------------------------------------------------------------------------------------
    cat /proc/sys/vm/swappiness
    修改swappiness值为10
    #sudo sysctl vm.swappiness=10
    #sudo gedit /etc/sysctl.conf
    vm.swappiness=10
    设置vm.swappiness=0 后并不代表禁用swap分区,只是告诉内核,能少用到swap分区就尽量少用到,
    设置vm.swappiness=100的话,则表示尽量使用swap分区,默认的值是60
    ------------------------------------------------------------------------------------------------------------------------------------------------
    第三步:关闭swap,再开启swap(请在业务低峰期操作,有可能导致服务器挂掉)
    #swapoff -a
    #swapon -a
    #free -m
    swapon -s 会查看到你的swap分区是挂在哪里!
    swapoff /dev/sda2
    swapon -a

  • 相关阅读:
    如何解决无法成功git commit 和git push
    orleans 项目调试注意
    silo 主机 配置
    asp.net core 项目引用包版本问题
    C# async 方法怎么被正确的消费 (新篇)
    C# 虚方法 复习
    C# dynamic 适用场景进一步说明
    [MySQL]
    C# Subject 观察者模式
    C# 协变与逆变
  • 原文地址:https://www.cnblogs.com/xinfang520/p/9120736.html
Copyright © 2011-2022 走看看