• 青蛙学Linux—内存管理


    在Linux下,内存分为两个部分,分别是物理内存和虚拟内存。物理内存就是主机上插入的内存条;虚拟内存就是在硬盘上虚拟出来的一块逻辑内存空间,用于解决物理内存不足的情况。Linux下的虚拟内存被称为交换空间Swap Space,也就是系统中的swap分区。虽然现在的物理内存已经足够大了,但是还是建议保留一定的swap分区。

    使用free命令可以查看当前内存的使用信息。命令语法如下:

    free [选项]

    常用选项:

    • -h:以易于阅读的方式显示内存使用信息

    free命令在CentOS 6.x和CentOS 7.x版本的系统下回显的内容并不相同,以下来详细分析下:

    CentOS 6.x

    [root@localhost ~]# free -h
                 total       used       free     shared    buffers     cached
    Mem:          7.7G       601M       7.1G       172K       151M       208M
    -/+ buffers/cache:       241M       7.5G
    Swap:         2.5G         0B       2.5G

    列详解:

    • total:总量
    • used:正在使用
    • free:空闲
    • shared:共享内存
    • buffers:存储块设备以及文件系统元数据(metadata)所占用的缓冲页
    • cached:存储普通文件所占用的缓存页

    行详解:

    • Mem:物理内存
    • -/+ buffers/cache:应用程序可以使用的内存
    • Swap:交换分区

    buffers/cached的存在是为了提高文件的读取性能而存在的,当应用程序需要内存时,buffers/cached占用的空间将很快被回收。所以,在系统看来,内存的free值=total-used,但对于应用程序来说,buffers/cached这一部分空间是可用的,所以free值=系统free值+buffers+cached。这也是为什么free命令的回显中会有两个free值的原因。

    CentOS 7.x

    [root@localhost ~]# free -h
                  total        used        free      shared  buff/cache   available
    Mem:           7.6G        192M        7.1G        8.8M        338M        7.2G
    Swap:          2.5G          0B        2.5G

    这里与CentOS 6.x中的回显不同的是,分开的buffers/cached列合并为buff/cache列,并新增了available列,同时-/+ buffers/cached行也取消了,使得显示更加简洁。CentOS 7.x下已经把buffers/cached合并,因为两者本质相同。新增的available列显示的就是应用程序可用的空闲内存。

    手动释放buffers/cached

    在手动释放buffers/cached前,必须使用以下命令将已更改的数据写入磁盘,并更新超级块,防止出现数据丢失的情况:

    sync

    释放buffers:

    echo 1 > /proc/sys/vm/drop_caches

    释放cached:

    echo 2 > /proc/sys/vm/drop_caches

    释放所有缓存:

    echo 3 > /proc/sys/vm/drop_caches

    在系统中手动创建swap

    swap所需的交换文件其实也是一个普通的文件,但创建该文件需要使用dd命令:

    dd if=/dev/zero of=swap文件路径 bs=大小 count=次数
    # /dev/zero是一个特殊的文件,当你读取它时,它会提供无限的空字符。该文件通常用于覆盖信息,或产生一个特定大小的空白文件
    # 同样的/dev/null也是一个特殊的文件,你可以将不用的数据统统丢给它,它会像黑洞一样吞噬掉这些数据而不会增大自身的体积

    使该文件成为交换文件:

    mkswap swap文件

    激活交换文件:

    swapon swap文件

    取消激活交换文件:

    swapoff swap文件

    接下来就可以使用rm命令删除该文件。

    swap的优化

    swappiness值决定了系统如何使用swap。当swappiness=0时,系统最大限度的使用物理内存,然后才是swap;当swappiness=100时,系统积极使用swap,并把内存上的数据及时搬运到swap。使用以下命令可以查看swappiness值:

    cat /proc/sys/vm/swappiness

    当物理内存的占用量=100-swappiness值时,就开始使用swap。

    使用以下命令临时调整swappiness值:

    sysctl vm.swappiness=x

    在/etc/sysctl.conf文件中添加以下内容可永久修改swappiness值:

    vm.swappiness=x
  • 相关阅读:
    Grails批改默认启动端口
    基于注解的SpringMVC简单介绍
    JSP、Servlet中的相对路径和绝对路径
    jsp相对路径绝对路径
    idea如何设置注释作者信息
    alt+4 打开控制台
    idea常用快捷键
    解决Error running 'index.jsp : Address localhost:1099 is already in use的方法
    演示事物所需表
    关于jdbc的面试题
  • 原文地址:https://www.cnblogs.com/yu2006070-01/p/10001951.html
Copyright © 2020-2023  润新知