linux清内存_linux清理内存 - CSDN
  • Linux 清除内存中的cache 首先以Centos6.4的来说,Centos7有些区别 一、buffer/cache/swap的介绍 #cat /etc/redhat-release #查看系统版本 CentOS release 6.4 (Final) #free -m #查看缓冲区及内存使用情况 ...

    Linux 清除内存中的cache

    首先以Centos6.4的来说,Centos7有些区别

    一、buffer/cache/swap的介绍

    #cat /etc/redhat-release  #查看系统版本

    CentOS release 6.4 (Final)  

    #free -m  #查看缓冲区及内存使用情况

                       total       used       free     shared    buffers     cached

    Mem:          7814       7681        132          0         23       5727

    -/+ buffers/cache:       1930       5884

    Swap:         8191         32       8159


    先看第二行Mem行:

    Mem:          7814       7681        132          0         23       5727  #内存总大小为7814MB,使用7681MB,空闲132MB,共享内存0M,buffers:23MB,cached:5727MB

    然后看地三行-/+ buffers/cache行:

    -/+ buffers/cache:       1930       5884   #(-buffers/cache) used内存数:1930MB(指的第一部分Mem行中的used – buffers – cached),(+buffers/cache) free内存数:5884MB(指的第一部分Mem行中的free + buffers + cached),也就是说-buffers/cache反映的是被程序实实在在吃掉的内存,而+buffers/cache反映的是可以挪用的内存总数.

    然后看第四列Swap行:

    Swap:         8191         32       8159 #这也就是我们经常说的虚拟内存,8192为swap分区的总大小为8192MB,32为swap分区的使用为32MB,8159为swap空闲为8159MB。


    swap分区的作用:

    Linux内核为了提高读写效率与速度,会将文件在内存中进行缓存,这部分内存就是Cache Memory(缓存内存)。即使你的程序运行结束后,Cache Memory也不会自动释放。这就会导致你在Linux系统中程序频繁读写文件后,你会发现可用物理内存变少。当系统的物理内存不够用的时候,就需要将物理内存中的一部分空间释放出来,以供当前运行的程序使用。那些被释放的空间可能来自一些很长时间没有什么操作的程序,这些被释放的空间被临时保存到Swap空间中,等到那些程序要运行时,再从Swap分区中恢复保存的数据到内存中。这样,系统总是在物理内存不够时,才进行Swap交换。所以swap分区不被占用或者占用很少,说明现在系统内存够用,运行还算良好,不会影响系统运行。


    首先,当物理内存不足以支撑系统和应用程序(进程)的运作时,这个Swap交换分区可以用作临时存放使用率不高的内存分页,把腾出的内存交给急需的应用程序(进程)使用。有点类似机房的UPS系统,虽然正常情况下不需要使用,但是异常情况下, Swap交换分区还是会发挥其关键作用。

    其次,即使你的服务器拥有足够多的物理内存,也有一些程序会在它们初始化时残留的极少再用到的内存分页内容转移到 swap 空间,以此让出物理内存空间。对于有发生内存泄漏几率的应用程序(进程),Swap交换分区更是重要,因为谁也不想看到由于物理内存不足导致系统崩溃。

    最后,现在很多个人用户在使用Linux,有些甚至是PC的虚拟机上跑Linux系统,此时可能常用到休眠(Hibernate),这种情况下也是推荐划分Swap交换分区的。

    其实少量使用Swap交换空间是不会影响性能,只有当RAM资源出现瓶颈或者内存泄露,进程异常时导致频繁、大量使用交换分区才会导致严重性能问题。另外使用Swap交换分区频繁,还会引起kswapd0进程(虚拟内存管理中, 负责换页的)耗用大量CPU资源,导致CPU飙升。



    空闲内存/已用内存换算(也可参考-/+ buffers/cache这行信息也是内存正确使用率):

    空闲内存=free(132)+buffers(23)+cached(5727)=5882

    已用内存=total(7814)-空闲内存(5882)=1932


    buffers和cache的区别:

    为了提高磁盘存取效率, Linux做了一些精心的设计, 除了对dentry进行缓存(用于VFS,加速文件路径名到inode的转换),还采取了两种主要Cache方式:Buffer Cache和Page Cache。前者针对磁盘块的读写,后者针对文件inode的读写。这些Cache有效缩短了I/O系统调用(比如read,write,getdents)的时间。

    磁盘的操作有逻辑级(文件系统)和物理级(磁盘块),这两种Cache就是分别缓存逻辑和物理级数据的。

    Page cache实际上是针对文件系统的,是文件的缓存,在文件层面上的数据会缓存到page cache。文件的逻辑层需要映射到实际的物理磁盘,这种映射关系由文件系统来完成。当page cache的数据需要刷新时,page cache中的数据交给buffer cache,因为Buffer Cache就是缓存磁盘块的。但是这种处理在2.6版本的内核之后就变的很简单了,没有真正意义上的cache操作。

    Buffer cache是针对磁盘块的缓存,也就是在没有文件系统的情况下,直接对磁盘进行操作的数据会缓存到buffer cache中,例如,文件系统的元数据都会缓存到buffer cache中。

    Buffer:缓冲区,一个用于存储速度不同步的设备或优先级不同的设备之间传输数据的区域。通过缓冲区,可以使进程之间的相互等待变少,从而使从速度慢的设备读入数据时,速度快的设备的操作进程不发生间断。

    缓冲(buffers)是根据磁盘的读写设计的,把分散的写操作集中进行,减少磁盘碎片和硬盘的反复寻道,从而提高系统性能。linux有一个守护进程定 期清空缓冲内容(即写如磁盘),也可以通过sync命令手动清空缓冲。

    简单说来,page cache用来缓存文件数据,buffer cache用来缓存磁盘数据。在有文件系统的情况下,对文件操作,那么数据会缓存到page cache,如果直接采用dd等工具对磁盘进行读写,那么数据会缓存到buffer cache。

    所以我们看linux,只要不用swap的交换空间,就不用担心自己的内存太少.如果常常swap用很多,可能你就要考虑加物理内存了.这也是linux看内存是否够用的标准.

    Cache: 高速缓存,是位于CPU与主内存间的一种容量较小但速度很高的存储器。由于CPU的速度远高于主内存,CPU直接从内存中存取数据要等待一定时间周 期,Cache中保存着CPU刚用过或循环使用的一部分数据,当CPU再次使用该部分数据时可从Cache中直接调用,这样就减少了CPU的等待时间,提 高了系统的效率。Cache又分为一级Cache(L1 Cache)和二级Cache(L2 Cache),L1 Cache集成在CPU内部,L2 Cache早期一般是焊在主板上,现在也都集成在CPU内部,常见的容量有256KB或512KB L2 Cache。

    如果 cache 的值很大,说明cache住的文件数很多。如果频繁访问到的文件都能被cache住,那么磁盘的读IO bi会非常小。

    缓存(cached)是把读取过的数据保存起来,重新读取时若命中(找到需要的数据)就不要去读硬盘了,若没有命中就读硬盘。其中的数据会根据读取频率进行组织,把最频繁读取的内容放在最容易找到的位置,把不再读的内容不断往后排,直至从中删除。


    注:下面是Centos7.2系统free -m的显示:

    #free -m

                  total        used        free      shared  buff/cache   available

    Mem:          64252        2924         258        3233       61069       57654

    Swap:          8191         144        8047


    博文来自:www.51niux.com

    二、内存查看命令

    2.1 用free加各种参数例如:

    命令参数:

    -b  以Byte为单位显示内存使用情况。 

    -k  以KB为单位显示内存使用情况。 

    -m  以MB为单位显示内存使用情况。

    -g   以GB为单位显示内存使用情况。 

    -o  不显示缓冲区调节列。 

    -s<间隔秒数>  持续观察内存使用状况。 

    -t  显示内存总和列。 

    -V  显示版本信息。

    # free -k -s 1 #显示单位为KB,然后每一秒刷新一次。

    但是这也只能显示一个总量,如果内存真的是被使用了,我们应该如何查询哪些进程占用内存过大呢?

    2.2 top命令

    执行top,然后按shift+M,可以对进行使用内存情况从大到小排序

    blob.png


    2.3 ps命令

    # ps -aux|sort -k 4 -n  #为了查看方便,让其从小到大排序

    blob.png

    第一列:USER  用户名

    第二列:PID 进程ID

    第三列:%CPU 进程的cpu占用率

    第四列:%MEM 进程的内存占用率

    第五列:VSZ 虚拟内存中进程的大小,单位KB

    第六列:RSS 进程实际内存大小,单位KB

    第七列:TTY 与进程关联的终端(tty)

    第八列:STAT 进程的状态

    下面为STAT的状态码:

    R 运行    Runnable (on run queue)            正在运行或在运行队列中等待。
    S 睡眠    Sleeping                休眠中, 受阻, 在等待某个条件的形成或接受到信号。
    I 空闲    Idle
    Z 僵死    Zombie(a defunct process)        进程已终止, 但进程描述符存在, 直到父进程调用wait4()系统调用后释放。
    D 不可中断    Uninterruptible sleep (ususally IO)    收到信号不唤醒和不可运行, 进程必须等待直到有中断发生。
    T 终止    Terminate                进程收到SIGSTOP, SIGSTP, SIGTIN, SIGTOU信号后停止运行运行。
    P 等待交换页
    W 无驻留页    has no resident pages        没有足够的记忆体分页可分配。
    X 死掉的进程
    < 高优先级进程                    高优先序的进程
    N 低优先    级进程                    低优先序的进程
    L 内存锁页    Lock                有记忆体分页分配并缩在记忆体内
    s 进程的领导者(在它之下有子进程);
    l 多进程的(使用 CLONE_THREAD, 类似 NPTL pthreads)
    + 位于后台的进程组

    第九列:START  进程启动时间和日期

    第十列:TIME  进程使用的总cpu时间

    第十一列: COMMAND 正在执行的命令行命令

    注:如果要进一步排查内存占用问题,可以用# pstree PID -ap #树状图的显示进程间的关系,默认PID为1,也就是全部

    # ps -eo user,pid,command|grep mysql  #查出mysql的uid

    # pstree 3584 -ap  #查看mysql下面都有哪些进程

    blob.png

    注:pgrep

    pgrep命令以名称为依据从运行进程队列中查找进程,并显示查找到的进程id。每一个进程ID以一个十进制数表示,通过一个分割字符串和下一个ID分开,默认的分割字符串是一个新行。对于每个属性选项,用户可以在命令行上指定一个以逗号分割的可能值的集合

    参数: -o:仅显示找到的最小(起始)进程号; -n:仅显示找到的最大(结束)进程号; -l:显示进程名称; -P:指定父进程号; -g:指定进程组; -t:指定开启进程的终端; -u:指定进程的有效用户ID。

    # pgrep -l mysqld  

    3584 mysqld_safe

    3752 mysqld


    博文来自:www.51niux.com

    2.4  #cat /proc/meminfo  #又或者说,我发现系统占用内存不大,内存都被缓存起来了,想看看内存使用的详细信息。

    #cat /proc/meminfo

    MemTotal:        8002048 kB   #所有可用RAM大小(即物理内存减去一些预留位和内核的二进制代码大小)

    MemFree:          141316 kB   #LowFree和HighFree的综合,被系统留着未使用的内存

    Buffers:            3492 kB    #用来给文件做缓冲大小

    Cached:          5850688 kB   #被高速缓冲存储器(cache memory)用的内存的大小

    SwapCached:         1004 kB  #被高速缓冲存储器(cache memory)用的交换空间的大小

    Active:          3685356 kB  #在活跃使用中的缓冲或高速缓冲存储器页面文件的大小,除非非常必要否则不会被移作他用.

    Inactive:        3634468 kB  # 在不经常使用中的缓冲或高速缓冲存储器页面文件的大小,可能被用于其他途径.

    Active(anon):     760408 kB  

    Inactive(anon):   706016 kB

    Active(file):    2924948 kB

    Inactive(file):  2928452 kB

    Unevictable:           0 kB

    Mlocked:               0 kB

    SwapTotal:       8388600 kB   #交换空间的总大小

    SwapFree:        8355464 kB   #未被使用交换空间的大小

    Dirty:             60612 kB   #等待被写回到磁盘的内存大小

    Writeback:            44 kB  #正在被写回到磁盘的内存大小

    AnonPages:       1465384 kB  #未映射页的内存大小

    Mapped:            10028 kB  #设备和文件等映射的大小

    Shmem:               128 kB  

    Slab:             393984 kB   #内核数据结构缓存的大小,可以减少申请和释放内存带来的消耗。

    SReclaimable:     314272 kB  #可收回Slab的大小

    SUnreclaim:        79712 kB   #不可收回Slab的大小(SUnreclaim+SReclaimable=Slab)

    KernelStack:        6656 kB

    PageTables:        13848 kB  #管理内存分页页面的索引表的大小。

    NFS_Unstable:          0 kB   #不稳定页表的大小

    Bounce:                0 kB

    WritebackTmp:          0 kB

    CommitLimit:    12389624 kB

    Committed_AS:    6404932 kB

    VmallocTotal:   34359738367 kB   #可以vmalloc虚拟内存大小

    VmallocUsed:      291660 kB  #已经被使用的虚拟内存大小

    VmallocChunk:   34359426484 kB  

    HardwareCorrupted:     0 kB

    AnonHugePages:    243712 kB

    HugePages_Total:       0    #内存大页的总数

    HugePages_Free:        0    #内存大页剩余数量

    HugePages_Rsvd:        0

    HugePages_Surp:        0

    Hugepagesize:       2048 kB  #内存大页的大小(64位操作系统中有2MB/1GB两种,默认是2MB。)

    DirectMap4k:        4096 kB

    DirectMap2M:     2084864 kB

    DirectMap1G:     6291456 kB


    博文来自:www.51niux.com

    三、手工释放内存区缓存(这是只是记录,但是不建议操作,本来cache就是为了提升系统性能,是linux区别于windows的优势所在,缓解磁盘的压力,如果真有必要可手工释放一下,也不要永久的的让cache作用无法发挥)

    # sync; echo 1 > /proc/sys/vm/drop_caches  #释放 pagecache

    # sync; echo 2 > /proc/sys/vm/drop_caches    #释放  dentries 和 inodes:

    # sync; echo 3 > /proc/sys/vm/drop_caches  #释放 pagecache,dentries 和 inodes:

    # sync; echo 0 > /proc/sys/vm/drop_caches  #默认0为不释放,让系统自己调节

    注:

    操作前要使用sync,强制将内存中内容写入硬盘,包含已修改的 i-node、已延迟的块 I/O 和读写映射文件。这一步是确保第二步的安全性。防止数据或操作丢失。

    linux内核2.6和内核3系列的区别:

    内核2.6的版本执行上述的操作都没问题的,但是到了内核3系列,就不能执行echo 0 >/proc/sys/vm/drop_caches的操作了,这是一个坑,重启才能改回去

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

    -bash: echo: write error: Invalid argument

    # sysctl -a|grep vm.drop_caches  #内核中有这个参数

    vm.drop_caches = 3

    # sysctl -w vm.drop_caches=0  #也写不进去,这个在内核2.6系列上面可以的,这也是手工释放内存缓存的另一种形式(sysctl -w vm.drop_caches=3)

    error: "Invalid argument" setting key "vm.drop_caches"

    # sysctl -w vm.drop_caches=1  #执行其他的是没问题的,但是就是执行0的插入不可以,要重启服务器。

    vm.drop_caches = 1


    注:

    swap清理:
    swapoff -a && swapon -a
    注意:这样清理有个前提条件,空闲的内存必须比已经使用的swap空间大。


    上述只是暂时生效,但是系统重启后,系统还是按照自己默认的方法去使用缓存,有的网友会写定时任务脚本晚上去释放一下内存cache,还有一种暴力的永久生效的方法,使cache的作用基本无法发挥。

    修改/etc/sysctl.conf 添加如下选项后就不会内存持续增加(这些配置摘抄自网上,未做测试,只是记录一下)
    vm.dirty_ratio = 1
    vm.dirty_background_ratio=1
    vm.dirty_writeback_centisecs=2
    vm.dirty_expire_centisecs=3
    vm.drop_caches=3
    vm.swappiness =100
    vm.vfs_cache_pressure=163
    vm.overcommit_memory=2
    vm.lowmem_reserve_ratio=32 32 8
    kern.maxvnodes=3

    #下面是相关解释:

    /proc/sys/vm/dirty_ratio

    这个参数控制文件系统的文件系统写缓冲区的大小,单位是百分比,表示系统内存的百分比,表示当写缓冲使用到系统内存多少的时候,开始向磁盘写出数据。增大之会使用更多系统内存用于磁盘写缓冲,也可以极大提高系统的写性能。但是,当你需要持续、恒定的写入场合时,应该降低其数值,一般启动上缺省是 10。设1加速程序速度

    /proc/sys/vm/dirty_background_ratio

    这个参数控制文件系统的pdflush进程,在何时刷新磁盘。单位是百分比,表示系统内存的百分比,意思是当写缓冲使用到系统内存多少的时候,pdflush开始向磁盘写出数据。增大之会使用更多系统内存用于磁盘写缓冲,也可以极大提高系统的写性能。但是,当你需要持续、恒定的写入场合时,应该降低其数值,一般启动上缺省是 5

    /proc/sys/vm/dirty_writeback_centisecs

    这个参数控制内核的脏数据刷新进程pdflush的运行间隔。单位是 1/100 秒。缺省数值是500,也就是 秒。如果你的系统是持续地写入动作,那么实际上还是降低这个数值比较好,这样可以把尖峰的写操作削平成多次写操

    /proc/sys/vm/dirty_expire_centisecs

    这个参数声明Linux内核写缓冲区里面的数据多“旧”了之后,pdflush进程就开始考虑写到磁盘中去。单位是 1/100秒。缺省是 30000,也就是 30秒的数据就算旧了,将会刷新磁盘。对于特别重载的写操作来说,这个值适当缩小也是好的,但也不能缩小太多,因为缩小太多也会导致IO提高太快。建议设置为 1500,也就是15秒算旧。

    /proc/sys/vm/drop_caches

    释放已经使用的cache

    /proc/sys/vm/page-cluster

    该文件表示在写一次到swap区的时候写入的页面数量,0表示1页,1表示2页,2表示4页。

    /proc/sys/vm/swapiness

    该文件表示系统进行交换行为的程度,数值(0-100)越高,越可能发生磁盘交换。

    /proc/sys/vm/vfs_cache_pressure

    该文件表示内核回收用于directory和inode cache内存的倾向


    展开全文
  • 但是凡事也有例外,有的时候内存会被缓存占用掉,导致系统使用SWAP空间影响性能,此时就需要执行释放内存清理缓存)的操作了。 Linux系统的缓存机制是相当先进的,他会针对dentry(用于VFS,加速文件路径名到...

    在Linux系统下,我们一般不需要去释放内存,因为系统已经将内存管理的很好。但是凡事也有例外,有的时候内存会被缓存占用掉,导致系统使用SWAP空间影响性能,此时就需要执行释放内存(清理缓存)的操作了。

    Linux系统的缓存机制是相当先进的,他会针对dentry(用于VFS,加速文件路径名到inode的转换)、Buffer Cache(针对磁盘块的读写)和Page Cache(针对文件inode的读写)进行缓存操作。但是在进行了大量文件操作之后,缓存会把内存资源基本用光。但实际上我们文件操作已经完成,这部分缓存已经用不到了。这个时候,我们难道只能眼睁睁的看着缓存把内存空间占据掉么?

    所以,我们还是有必要来手动进行Linux下释放内存的操作,其实也就是释放缓存的操作了。

    要达到释放缓存的目的,我们首先需要了解下关键的配置文件/proc/sys/vm/drop_caches。这个文件中记录了缓存释放的参数,默认值为0,也就是不释放缓存。他的值可以为0~3之间的任意数字,代表着不同的含义:

    0 – 不释放
    1 – 释放页缓存
    2 – 释放dentries和inodes
    3 – 释放所有缓存

    知道了参数后,我们就可以根据我们的需要,使用下面的指令来进行操作。

    首先我们需要使用sync指令,将所有未写的系统缓冲区写到磁盘中,包含已修改的 i-node、已延迟的块 I/O 和读写映射文件。否则在释放缓存的过程中,可能会丢失未保存的文件。

    #sync

    接下来,我们需要将需要的参数写进/proc/sys/vm/drop_caches文件中,比如我们需要释放所有缓存,就输入下面的命令:

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

    此指令输入后会立即生效,可以查询现在的可用内存明显的变多了。

    要查询当前缓存释放的参数,可以输入下面的指令:

    #cat /proc/sys/vm/drop_caches

     

    ----------------------------------------------------------------

     

    1.清理前内存使用情况 
    free -m
     

    2.开始清理  
    echo 1 > /proc/sys/vm/drop_caches

    3.清理后内存使用情况 
    free -m

    4.完成!

    查看内存条数命令:
     

    dmidecode | grep -A16 "Memory Device$"

     

      ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

      

     

    # sync
    # echo 1 > /proc/sys/vm/drop_caches
      echo 2 > /proc/sys/vm/drop_caches
      echo 3 > /proc/sys/vm/drop_caches

    cache释放:
    To free pagecache:
    echo 1 > /proc/sys/vm/drop_caches

    To free dentries and inodes:
    echo 2 > /proc/sys/vm/drop_caches

    To free pagecache, dentries and inodes:
    echo 3 > /proc/sys/vm/drop_caches

    说明,释放前最好sync一下,防止丢数据。

    因为LINUX的内核机制,一般情况下不需要特意去释放已经使用的cache。这些cache起来的内容可以增加文件以及的读写速度。
    先说下free命令怎么看内存

     

    [root@yuyii proc]# free

    total   used   free     shared buffers cached
    Mem: 515588 295452 220136 0      2060   64040
    -/+ buffers/cache: 229352 286236
    Swap: 682720 112 682608

    其中第一行用全局角度描述系统使用的内存状况:
    total——总物理内存
    used——已使用内存,一般情况这个值会比较大,因为这个值包括了cache+应用程序使用的内存
    free——完全未被使用的内存
    shared——应用程序共享内存
    buffers——缓存,主要用于目录方面,inode值等(ls大目录可看到这个值增加)
    cached——缓存,用于已打开的文件
    note:
        total=used+free
        used=buffers+cached (maybe add shared also)

    第二行描述应用程序的内存使用:
    前个值表示-buffers/cache——应用程序使用的内存大小,used减去缓存值
    后个值表示+buffers/cache——所有可供应用程序使用的内存大小,free加上缓存值
    note:
       -buffers/cache=used-buffers-cached
       +buffers/cache=free+buffers+cached

    第三行表示swap的使用:
    used——已使用
    free——未使用

    手动执行sync命令(描述:sync 命令运行 sync 子例程。如果必须停止系统,则运行 sync 命令以确保文件系统的完整性。sync 命令将所有未写的系统缓冲区写到磁盘中,包含已修改的 i-node、已延迟的块 I/O 和读写映射文件)
     

    [root@server test]# echo 3 > /proc/sys/vm/drop_caches
    [root@server test]# cat /proc/sys/vm/drop_caches

                                
    !将/proc/sys/vm/drop_caches值设为3

     

    有关/proc/sys/vm/drop_caches的用法在下面进行了说明
    /proc/sys/vm/drop_caches (since Linux 2.6.16)
    Writing to this file causes the kernel to drop clean caches,
    dentries and inodes from memory, causing that memory to become
    free.

    To free pagecache, use echo 1 > /proc/sys/vm/drop_caches; to
    free dentries and inodes, use echo 2 > /proc/sys/vm/drop_caches;
    to free pagecache, dentries and inodes, use echo 3 >
    /proc/sys/vm/drop_caches.

    Because this is a non-destructive operation and dirty objects

     

    展开全文
  • linux 清除内存缓存

    2018-10-18 22:28:31
    sync; echo 3 &gt; /proc/sys/vm/drop_caches

    sync; echo 3 > /proc/sys/vm/drop_caches

    展开全文
  • linux释放内存的命令

    2019-09-12 02:12:05
    Linux释放内存的命令:sync echo 1 > /proc/sys/vm/drop_caches drop_caches的值可以是0-3之间的数字,代表不同的含义:0:不释放(系统默认值)1:释放页缓存2:释放dentries和inodes 3:释放所有缓存释放完内存...

    Linux释放内存的命令:
    sync
    echo 1 > /proc/sys/vm/drop_caches

    drop_caches
    的值可以是0-3之间的数字,代表不同的含义:
    0:不释放(系统默认值)
    1:释放页缓存
    2:释放dentriesinodes
    3
    :释放所有缓存

    释放完内存后改回去让系统重新自动分配内存。
    echo 0 >/proc/sys/vm/drop_caches

    free -m #
    看内存是否已经释放掉了。

    如果我们需要释放所有缓存,就输入下面的命令:
    echo 3 > /proc/sys/vm/drop_caches

    ######### Linux
    释放内存的相关知识 ###############

    Linux系统下,我们一般不需要去释放内存,因为系统已经将内存管理的很好。但是凡事也有例外,有的时候内存会被缓存占用掉,导致系统使用SWAP 间影响性能,例如当你在linux下频繁存取文件后,物理内存会很快被用光,当程序结束后,内存不会被正常释放,而是一直作为caching。,此时就需 要执行释放内存(清理缓存)的操作了。

    Linux系统的缓存机制是相当先进的,他会针对dentry(用于VFS,加速文件路径名到inode的转换)、Buffer Cache(针对磁盘块的读写)和Page Cache(针对文件inode的读写)进行缓存操作。但是在进行了大量文件操作之后,缓存会把内存资源基本用光。但实际上我们文件操作已经完成,这部分 缓存已经用不到了。这个时候,我们难道只能眼睁睁的看着缓存把内存空间占据掉吗?所以,我们还是有必要来手动进行Linux下释放内存的操作,其实也就是 释放缓存的操作了。/proc是一个虚拟文件系统,我们可以通过对它的读写操作做为与kernel实体间进行通信的一种手段.也就是说可以通过修改 /proc中的文件,来对当前kernel的行为做出调整.那么我们可以通过调整/proc/sys/vm/drop_caches来释放内存。要达到释 放缓存的目的,我们首先需要了解下关键的配置文件/proc/sys/vm/drop_caches。这个文件中记录了缓存释放的参数,默认值为0,也就 是不释放缓存。

    一般复制了文件后,可用内存会变少,都被cached占用了,这是linux为了提高文件读取效率的做法:为了提高磁盘存取效率, Linux做了一些精心的设计, 除了对dentry进行缓存(用于VFS,加速文件路径名到inode的转换), 还采取了两种主要Cache方式:Buffer CachePage Cache。前者针对磁盘块的读写,后者针对文件inode的读写。这些Cache有效缩短了 I/O系统调用(比如read,write,getdents)的时间。"

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

    [root@fcbu.com ~]# free -m
                 total       used       free     shared    buffers     cached
    Mem:
              7979       7897         82          0         30       3918
    -/ buffers/cache:
           3948       4031
    Swap:         4996        438       4558


    第一行用全局角度描述系统使用的内存状况:
    total 内存总数
    used 已经使用的内存数,一般情况这个值会比较大,因为这个值包括了cache 应用程序使用的内存
    free 空闲的内存数
    shared 多个进程共享的内存总额
    buffers 缓存,主要用于目录方面,inode值等(ls大目录可看到这个值增加)
    cached 缓存,用于已打开的文件

    第二行描述应用程序的内存使用:
    -buffers/cache 的内存数:used - buffers - cached
    buffers/cache
    的内存数:free buffers cached
    前个值表示-buffers/cache 应用程序使用的内存大小,used减去缓存值
    后个值表示 buffers/cache 所有可供应用程序使用的内存大小,free加上缓存值

    第三行表示swap的使用:
    used 已使用
    free 未使用 

    可用的内存=free memory buffers cached

    为什么free这么小,是否关闭应用后内存没有释放?
    但实际上,我们都知道这是因为Linux对内存的管理与Windows不同,free小并不是说内存不够用了,应该看的是free的第二行最后一个值:-/ buffers/cache:       3948       4031 ,这才是系统可用的内存大小。

    实际项目中的经验告诉我们,如果因为是应用有像内存泄露、溢出的问题,从swap的使用情况是可以比较快速可以判断的,但free上面反而比较难查看。我觉得既然核心是可以快速清空buffercache,但核心并没有这样做(默认值是0),我们不应该随便去改变它。

    一般情况下,应用在系统上稳定运行了,free值也会保持在一个稳定值的,虽然看上去可能比较小。当发生内存不足、应用获取不到可用内存、OOM 误等问题时,还是更应该去分析应用方面的原因,如用户量太大导致内存不足、发生应用内存溢出等情况,否则,清空buffer,强制腾出free的大小,可 能只是把问题给暂时屏蔽了,所以说一般情况下linux都不用经常手动释放内存。

    向/proc/sys/vm/drop_caches中写入内容,会清理缓存。建议先执行sync(sync 命令将所有未写的系统缓冲区写到磁盘中,包含已修改的 i-node、已延迟的块 I/O 和读写映射文件)。执行echo 1、2、3 至 /proc/sys/vm/drop_caches, 达到不同的清理目的。

     

     



     

     

    展开全文
  • 如果swap空间使用到30%以上,系统就变得很慢,如果物理内存够,就需要清理下。 原文:http://wushank.blog.51cto.com/3489095/1255906 先应该同步一下 [root@mysql172 ~]# sync 再执行 echo 1 > /...
  • 当在Linux下频繁存取文件后,物理内存会很快被用光,当程序结束后,内存不会被正常释放,而是一直作为caching 因此我们很有必要手动清理系统缓存释放内存。 我们在清理缓存前应该先 sync下 因为系统在操作的...
  • Linux清理内存命令

    2018-10-22 23:58:16
    Linux清理内存命令 1.清理前内存使用情况 free -m 2.开始清理 echo 1 &gt; /proc/sys/vm/drop_caches 3.清理后内存使用情况 free -m
  • linux清理内存命令

    2012-05-16 17:30:15
    1.清理内存使用情况  free -m 2.开始清理  echo 1 > /proc/sys/vm/drop_caches 3.清理内存使用情况  free -m 4.完成! 查看内存条数命令: dmidecode | grep -A16 "Memory ...
  • linux清理内存的方法

    2013-02-04 12:39:34
    1.清理内存使用情况  free -m 2.开始清理  echo 1 > /proc/sys/vm/drop_caches 3.清理内存使用情况  free -m
  • shell脚本清理linux内存

    2019-06-09 16:13:48
    shell脚本清理linux内存代码如下: 注意:不同linux设备的sh路径可能不同,需通过which sh查看sh的绝对路径修改即可。...#执行linux清理内存命令 echo 1 > /proc/sys/vm/drop_caches echo $(date +'%...
  • linux清理内存

    2016-03-23 18:53:20
    Linux系统的缓存机制是相当先进的,他会针对dentry(用于VFS,加速文件路径名到inode的转换)、Buffer Cache(针对磁盘块的读写)和Page Cache(针对文件inode的读写)进行缓存操作。但是在进行了大量文件操作之后,...
  • Linux 内存清理

    2018-09-17 15:27:56
    Linux系统下,我们一般不需要去释放内存,因为系统已经将内存管理的很好。但是凡事也有例外,有的时候内存会被缓存占用掉,导致系统使用SWAP空间影响性能,此时就需要执行释放内存清理缓存)的操作了。 Linux...
  • linux自动内存清理

    2017-11-04 21:56:10
    下边是内存清理命令,把这个写到一个linux shell的free.sh文件中。要清理时运行一下就可以了。#!/bin/bash free -m sync echo 1 > /proc/sys/vm/drop_caches echo 2 > /proc/sys/vm/drop_caches echo 3 > /proc/sy
  • 在如今Linux成为高端服务器越来越普及的的时候,各种厂家竞相开放相应的产品来晚上此操作系统的应用,但是对于Linux操 作系统在运作一段时间时候常会出现我没什么应用在跑内存还占据很多,此时需要强制去释放内存。...
  • 查看内存使用情况: # free -m 查看应用程序使用情况:(-M是根据内存使用率排序,-P是根据CPU使用率排序) # top [-M] [-P] 清理内存: # echo 1 > /prop/sys/vm/drop_caches
  • linux 内存清理

    2020-07-30 23:30:03
    linux 内存清理神器,经个人长期验证使用,没有问题,如果你面临linxu服务器内存时不时飙升,供尚用
  • Writing to this will cause the kernel to drop clean caches, dentries and inodes from memory, causing that memory to become free. To free pagecache: echo 1 > /proc/sys/vm/drop_caches ...
  • linux清理内存、缓存

    2017-09-14 10:14:44
    linux清理缓存,以释放内存   系统环境:Cent OS 5.4 x64 今天查看开发使用的机器,内存使用了11G,绝大部门都是被缓存了,根据linux内存可使用的计算方法:可用内存=free+buffers+cached,那么这台服务器可用...
  • Linux 硬盘内存清理

    2018-04-03 10:48:49
    由于阿里服务器上跑了一个免费API项目,平时只是更新,没具体注意服务器状态,昨天更新的时候顺便检查了下服务器状态,结果发现硬盘内存竟然快满了,这里简易记录下处理过程。 1.查看内存使用情况: df -h ...
1 2 3 4 5 ... 20
收藏数 183,079
精华内容 73,231
关键字:

linux清内存