• Linux 释放物理内存和虚拟内存


    1.查看内存占用情况

    $ free -m -h
                  total        used        free      shared  buff/cache   available
    Mem:           7.7G        1.0G        5.9G        385M        780M        6.0G
    Swap:          7.4G        1.0G        6.4G

    2.释放物理内存

    (1) 释放内存前先使用sync命令做同步,以确保文件系统的完整性,将所有未写的系统缓冲区写到磁盘中,包含已修改的 i-node、已延迟的块 I/O 和读写映射文件。否则在释放缓存的过程中,可能会丢失未保存的文件。

    $ sync

    (2) 然后通过修改proc系统的drop_caches清理free的cache

    $ echo 3 > /proc/sys/vm/drop_caches

    (3) 释放完内存后改回去让系统重新自动分配内存

    $ echo 0 > /proc/sys/vm/drop_caches

    可能会遇到了 "bash: /proc/sys/vm/drop_caches: Permission denied"的问题,即使加上sudo也不行.

    原因:重定向符号 “>” 和 ">>" 也是 bash 的命令。使用 sudo 只是让 echo 命令具有了 root 权限,但是没有让 “>” 和 ">>" 命令也具有 root 权限,所以 bash 会认为这两个命令都没有向 drop_caches 文件写入信息的权限。

    解决方法:

    方法一是利用 "sh -c" 命令,它可以让 bash 将一个字串作为完整的命令来执行,这样就可以将 sudo 的影响范围扩展到整条命令。具体用法如下:

    $ sudo sh -c 'echo 3 > /proc/sys/vm/drop_caches'

    方法二是利用管道和 tee 命令,该命令可以从标准输入中读入信息并将其写入标准输出或文件中,具体用法如下:

    $ echo 3 | sudo tee -a /proc/sys/vm/drop_caches

    注意,tee 命令的 "-a" 选项的作用等同于 ">>" 命令,如果去除该选项,那么 tee 命令的作用就等同于 ">" 命令。

    参考:https://zhidao.baidu.com/question/1111512531871775459.html

    3.释放虚拟内存

    (1) 关停swap分区(释放虚拟内存):

    $ sudo swapoff -a

    注意:要保证物理内存剩余量要大于等于swap使用量,否则不能成功释放虚拟内存.(根据内存机制,swap分区一旦释放,所有存放在swap分区的文件都会转存到物理内存上)例如:

    $ sudo swapoff -a
    swapoff: /dev/sdb8: swapoff failed: Cannot allocate memory

    如果成功关停swap分区,可以看到Swap这一行的状态显示全0:

    $ free -m -h
                  total        used        free      shared  buff/cache   available
    Mem:           7.7G        1.7G        4.9G        732M        1.1G        4.9G
    Swap:            0B          0B          0B

    (2) 再开启swap分区:

    $ sudo swapon -a

    这时可以看到swap分区free==total,used=0

    $ free -m -h
                  total        used        free      shared  buff/cache   available
    Mem:           7.7G        1.7G        4.8G        740M        1.1G        4.9G
    Swap:          7.4G          0B        7.4G
  • 相关阅读:
    c# PrintDocument 设置自定义纸张大小的示例
    C#获取本地打印机列表,并将指定打印机设置为默认打印机
    水晶报表自定义纸张大小打印 (Crystal Report Print with custom paper size)
    c#打印机设置,取得打印机列表及相应打印机的所有纸张格式
    在C#中设置打印机纸张大小
    打印grid
    获取List集合中最大值的方法
    mysql使用索引优化查询效率
    mysql数据库中标的key的含义
    mysql数据库添加索引优化查询效率
  • 原文地址:https://www.cnblogs.com/bymo/p/7569281.html
Copyright © 2020-2023  润新知