linux内核缓存_linux 中内核缓存和应用缓存大小 - CSDN
精华内容
参与话题
  • Linux 内核详解以及内核缓冲区技术
                   

    Linux 内核简介

    现在让我们从一个比较高的高度来审视一下 GNU/Linux 操作系统的体系结构。您可以从两个层次上来考虑操作系统,如图 2 所示。


    图 2. GNU/Linux 操作系统的基本体系结构
    GNU/Linux 操作系统的基本体系结构 

    最上面是用户(或应用程序)空间。这是用户应用程序执行的地方。用户空间之下是内核空间,Linux 内核正是位于这里。

    GNU C Library (glibc)也在这里。它提供了连接内核的系统调用接口,还提供了在用户空间应用程序和内核之间进行转换的机制。这点非常重要,因为内核和用户空间的应用程序使用的是不同的保护地址空间。每个用户空间的进程都使用自己的虚拟地址空间,而内核则占用单独的地址空间。 更多信息,请参看 参考资料 一节中的链接。

    Linux 内核可以进一步划分成 3 层。最上面是系统调用接口,它实现了一些基本的功能,例如 read 和 write。系统调用接口之下是内核代码,可以更精确地定义为独立于体系结构的内核代码。这些代码是 Linux 所支持的所有处理器体系结构所通用的。在这些代码之下是依赖于体系结构的代码,构成了通常称为 BSP(Board Support Package)的部分。这些代码用作给定体系结构的处理器和特定于平台的代码。

    Linux 内核的属性

    在讨论大型而复杂的系统的体系结构时,可以从很多角度来审视系统。体系结构分析的一个目标是提供一种方法更好地理解源代码,这正是本文的目的。

    Linux 内核实现了很多重要的体系结构属性。在或高或低的层次上,内核被划分为多个子系统。Linux 也可以看作是一个整体,因为它会将所有这些基本服务都集成到内核中。这与微内核的体系结构不同,后者会提供一些基本的服务,例如通信、I/O、内存和进程管理,更具体的服务都是插入到微内核层中的。每种内核都有自己的优点,不过这里并不对此进行讨论。

    随着时间的流逝,Linux 内核在内存和 CPU 使用方面具有较高的效率,并且非常稳定。但是对于 Linux 来说,最为有趣的是在这种大小和复杂性的前提下,依然具有良好的可移植性。Linux 编译后可在大量处理器和具有不同体系结构约束和需求的平台上运行。一个例子是 Linux 可以在一个具有内存管理单元(MMU)的处理器上运行,也可以在那些不提供 MMU 的处理器上运行。Linux 内核的 uClinux 移植提供了对非 MMU 的支持。

    Linux的主要子系统

    现在使用图 3 中的分类说明 Linux 内核的主要组件。


    图 3. Linux 内核的一个体系结构透视图
    Linux 内核的一个体系结构透视图 

    系统调用接口

    SCI 层提供了某些机制执行从用户空间到内核的函数调用。正如前面讨论的一样,这个接口依赖于体系结构,甚至在相同的处理器家族内也是如此。SCI 实际上是一个非常有用的函数调用多路复用和多路分解服务。在 ./linux/kernel 中您可以找到 SCI 的实现,并在 ./linux/arch 中找到依赖于体系结构的部分。

    进程管理

    进程管理的重点是进程的执行。在内核中,这些进程称为线程,代表了单独的处理器虚拟化(线程代码、数据、堆栈和 CPU 寄存器)。在用户空间,通常使用进程 这个术语,不过 Linux 实现并没有区分这两个概念(进程和线程)。内核通过 SCI 提供了一个应用程序编程接口(API)来创建一个新进程(fork、exec 或 Portable Operating System Interface [POSIX] 函数),停止进程(kill、exit),并在它们之间进行通信和同步(signal 或者 POSIX 机制)。

    进程管理还包括处理活动进程之间共享 CPU 的需求。内核实现了一种新型的调度算法,不管有多少个线程在竞争 CPU,这种算法都可以在固定时间内进行操作。这种算法就称为 O(1) 调度程序,这个名字就表示它调度多个线程所使用的时间和调度一个线程所使用的时间是相同的。 O(1) 调度程序也可以支持多处理器(称为对称多处理器或 SMP)。您可以在 ./linux/kernel 中找到进程管理的源代码,在 ./linux/arch 中可以找到依赖于体系结构的源代码。

    内存管理

    内核所管理的另外一个重要资源是内存。为了提高效率,如果由硬件管理虚拟内存,内存是按照所谓的内存页 方式进行管理的(对于大部分体系结构来说都是 4KB)。Linux 包括了管理可用内存的方式,以及物理和虚拟映射所使用的硬件机制。

    不过内存管理要管理的可不止 4KB 缓冲区。Linux 提供了对 4KB 缓冲区的抽象,例如 slab 分配器。这种内存管理模式使用 4KB 缓冲区为基数,然后从中分配结构,并跟踪内存页使用情况,比如哪些内存页是满的,哪些页面没有完全使用,哪些页面为空。这样就允许该模式根据系统需要来动态调整内存使用。

    为了支持多个用户使用内存,有时会出现可用内存被消耗光的情况。由于这个原因,页面可以移出内存并放入磁盘中。这个过程称为交换,因为页面会被从内存交换到硬盘上。内存管理的源代码可以在 ./linux/mm 中找到。

    虚拟文件系统

    虚拟文件系统(VFS)是 Linux 内核中非常有用的一个方面,因为它为文件系统提供了一个通用的接口抽象。VFS 在 SCI 和内核所支持的文件系统之间提供了一个交换层(请参看图 4)。


    图 4. VFS 在用户和文件系统之间提供了一个交换层
    VFS 在用户和文件系统之间提供了一个交换层 

    在 VFS 上面,是对诸如 open、close、read 和 write 之类的函数的一个通用 API 抽象。在 VFS 下面是文件系统抽象,它定义了上层函数的实现方式。它们是给定文件系统(超过 50 个)的插件。文件系统的源代码可以在 ./linux/fs 中找到。

    文件系统层之下是缓冲区缓存,它为文件系统层提供了一个通用函数集(与具体文件系统无关)。这个缓存层通过将数据保留一段时间(或者随即预先读取数据以便在需要是就可用)优化了对物理设备的访问。缓冲区缓存之下是设备驱动程序,它实现了特定物理设备的接口。

    网络堆栈

    网络堆栈在设计上遵循模拟协议本身的分层体系结构。回想一下,Internet Protocol (IP) 是传输协议(通常称为传输控制协议或 TCP)下面的核心网络层协议。TCP 上面是 socket 层,它是通过 SCI 进行调用的。

    socket 层是网络子系统的标准 API,它为各种网络协议提供了一个用户接口。从原始帧访问到 IP 协议数据单元(PDU),再到 TCP 和 User Datagram Protocol (UDP),socket 层提供了一种标准化的方法来管理连接,并在各个终点之间移动数据。内核中网络源代码可以在 ./linux/net 中找到。

    设备驱动程序

    Linux 内核中有大量代码都在设备驱动程序中,它们能够运转特定的硬件设备。Linux 源码树提供了一个驱动程序子目录,这个目录又进一步划分为各种支持设备,例如 Bluetooth、I2C、serial 等。设备驱动程序的代码可以在 ./linux/drivers 中找到。

    依赖体系结构的代码

    尽管 Linux 很大程度上独立于所运行的体系结构,但是有些元素则必须考虑体系结构才能正常操作并实现更高效率。./linux/arch 子目录定义了内核源代码中依赖于体系结构的部分,其中包含了各种特定于体系结构的子目录(共同组成了 BSP)。对于一个典型的桌面系统来说,使用的是 i386 目录。每个体系结构子目录都包含了很多其他子目录,每个子目录都关注内核中的一个特定方面,例如引导、内核、内存管理等。这些依赖体系结构的代码可以在 ./linux/arch 中找到。


    以上的内容来自:http://www.ibm.com/developerworks/cn/linux/l-linux-kernel/


    下面介绍内核缓冲区的内容:

    为什么总是需要将数据由内核缓冲区换到用户缓冲区或者相反呢?

    答:用户进程是运行在用户空间的,不能直接操作内核缓冲区的数据。 用户进程进行系统调用的时候,会由用户态切换到内核态,待内核处理完之后再返回用户态

    用缓冲技术能很明显的提高系统效率。内核与外围设备的数据交换,内核与用户空间的数据交换都是比较费时的,使用缓冲区就是为了优化这些费时的操作。其实核心到用户空间的操作本身是不buffer的,是由I/O库用buffer来优化了这个操作。比如read本来从内核读取数据时是比较费时的,所以一次取出一块,以避免多次陷入内核。
          应用内核缓冲区的 主要思想就是一次读入大量的数据放在缓冲区,需要的时候从缓冲区取得数据
          管理员模式和用户模式之间的切换需要消耗时间,但相比之下,磁盘的I/O操作消耗的时间更多,为了提高效率,内核也使用缓冲区技术来提高对磁盘的访问速度
    磁盘是数据块 的集合,内核会对磁盘上的数据块做缓冲。内核将磁盘上的数据块复制到内核缓冲区中,当一个用户空间中的进程要从磁盘上读数据时,内核一般不直接读磁盘,而 是将内核缓冲区中的数据复制到进程的缓冲区中。当进程所要求的数据块不在内核缓冲区时,内核会把相应的数据块加入到请求队列,然后把该进程挂起,接着为其 他进程服务。一段时间之后(其实很短的时间),内核把相应的数据块从磁盘读到内核缓冲区,然后再把数据复制到进程的缓冲区中,最后唤醒被挂起的进程
          注:理解内核缓冲区技术的原理有助于更好的掌握系统调用read&write,read把数据从内核缓冲区复制到进程缓冲区,write把数据从进程缓冲区复制到内核缓冲区,它们不等价于数据在内核缓冲区和磁盘之间的交换
          从理论上讲,内核可以在任何时候写磁盘,但并不是所有的write操作都会导致内核的写动作。内核会把要写的数据暂时存在缓冲区中,积累到一定数量后再一 次写入。有时会导致意外情况,比如断电,内核还来不及把内核缓冲区中的数据写道磁盘上,这些更新的数据就会丢失。
          应用内核缓冲技术导致的结果是:提高了磁盘的I/O效率;优化了磁盘的写操作;需要及时的将缓冲数据写到磁盘。



               
    展开全文
  • linux内核缓存

    2019-05-10 11:00:32
    Linux缓存 I/O 机制中,操作系统会将 I/O 的数据缓存在文件系统的页缓存( page cache )中,也就是说,数据会先被拷贝到操作系统内核的缓冲区中,然后才会从操作系统内核的缓冲区拷贝到应用程序的地址空间。...

    一、什么是缓存 I/O (Buffered I/O)

        缓存 I/O 又被称作标准 I/O,大多数文件系统的默认 I/O 操作都是缓存 I/O。在 Linux 的缓存 I/O 机制中,操作系统会将 I/O 的数据缓存在文件系统的页缓存( page cache )中,也就是说,数据会先被拷贝到操作系统内核的缓冲区中,然后才会从操作系统内核的缓冲区拷贝到应用程序的地址空间。缓存 I/O 有以下这些优点:

    缓存 I/O 使用了操作系统内核缓冲区,在一定程度上分离了应用程序空间和实际的物理设备。

    缓存 I/O 可以减少读盘的次数,从而提高性能。

    当应用程序尝试读取某块数据的时候,如果这块数据已经存放在了页缓存中,那么这块数据就可以立即返回给应用程序,而不需要经过实际的物理读盘操作。当然,如果数据在应用程序读取之前并未被存放在页缓存中,那么就需要先将数据从磁盘读到页缓存中去。对于写操作来说,应用程序也会将数据先写到页缓存中去,数据是否被立即写到磁盘上去取决于应用程序所采用的写操作机制:如果用户采用的是同步写机制( synchronous writes ), 那么数据会立即被写回到磁盘上,应用程序会一直等到数据被写完为止;如果用户采用的是延迟写机制( deferred writes ),那么应用程序就完全不需要等到数据全部被写回到磁盘,数据只要被写到页缓存中去就可以了。在延迟写机制的情况下,操作系统会定期地将放在页缓存中的数据刷到磁盘上。与异步写机制( asynchronous writes )不同的是,延迟写机制在数据完全写到磁盘上的时候不会通知应用程序,而异步写机制在数据完全写到磁盘上的时候是会返回给应用程序的。所以延迟写机制本身是存在数据丢失的风险的,而异步写机制则不会有这方面的担心。

    二、文件 Cache

        文件 Cache 是文件数据在内存中的副本,因此文件 Cache 管理与内存管理系统和文件系统都相关:一方面文件 Cache 作为物理内存的一部分,需要参与物理内存的分配回收过程,另一方面文件 Cache 中的数据来源于存储设备上的文件,需要通过文件系统与存储设备进行读写交互。从操作系统的角度考虑,文件 Cache 可以看做是内存管理系统与文件系统之间的联系纽带。因此,文件 Cache 管理是操作系统的一个重要组成部分,它的性能直接影响着文件系统和内存管理系统的性能。

    为了提升磁盘设备的IO性能,操作系统会使用内存作为磁盘设备的cache,并使用memory map方式在访问时建立与文件系统的缓存映射。文件系统的缓存,是以Page Cache为单位,一个Page Cache包含多个Buffer Cache。

    向文件中写入数据时,数据会先缓存在Page Cache中,内存中的这部分数据被标注为Dirty Page,linux系统上的pdflush守护进程会跟进系统设置将将这部分Dirty Page刷到磁盘上,也可以通过fsync系统调用在数据写入后强制刷到磁盘上。将写入的数据刷入磁盘时,是以Buffer Cache为单位,每次回写若干个Buffer Cache。

    读取文件内容时,系统会一次性连续读取包括所请求页面在内的多个页面(如预读页面个数为n)。如果请求的页面在page cache中命中的话,会从缓存中返回页面内容,增加读取的页面数量,异步读取2n个页面;如果请求的页面没有在page cache中命中,也会增加读取页面数量,同步读取2n个页面。

    文件 Cache 管理指的就是对这些由操作系统分配,并用来存储文件数据的内存的管理。 Cache 管理的优劣通过两个指标衡量:一是 Cache 命中率,Cache 命中时数据可以直接从内存中获取,不再需要访问低速外设,因而可以显著提高性能;二是有效 Cache 的比率,有效 Cache 是指真正会被访问到的 Cache 项,如果有效 Cache 的比率偏低,则相当部分磁盘带宽会被浪费到读取无用 Cache 上,而且无用 Cache 会间接导致系统内存紧张,最后可能会严重影响性能。

    三、如何清除linux内核缓存

    1.仅清除页面缓存(PageCache)

    # sync; echo 1 > /proc/sys/vm/drop_caches
    

    2.清除目录项和inode

    # sync; echo 2 > /proc/sys/vm/drop_caches
    

    3.清除页面缓存,目录项和inode

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

    上述命令的说明:

    sync 将刷新文件系统缓冲区(buffer),命令通过“;”分隔,顺序执行,shell在执行序列中的下一个命令之前会等待命令的终止。正如内核文档中提到的,写入到drop_cache将清空缓存而不会杀死任何应用程序/服务,echo命令做写入文件的工作。

     

    展开全文
  • Linux内核缓存

    2019-03-05 08:10:54
    缓存为什么会有冷热? 究其原因,是因为对于内存的访问,可能是CPU发起的,也可以是DMA设备发起的。 如果是CPU发起的,在CPU的硬件缓存中,就会保存相应的页内容。如果这个页本来没有存在于硬件缓存中,那么它的...

    缓存为什么会有冷热?

    究其原因,是因为对于内存的访问,可能是CPU发起的,也可以是DMA设备发起的。

    如果是CPU发起的,在CPU的硬件缓存中,就会保存相应的页内容。如果这个页本来没有存在于硬件缓存中,那么它的到来,势必会将原本为其他的页缓存的内容挤出硬件缓存。

    但是,如果对于内存的访问是由DMA设备发起的,那么该页不会被CPU访问,就不需要在CPU的硬件缓存中进行缓存,也不会对已经缓存在硬件缓存中的页内容造成伤害。

    Linux操作系统中,每个内存区域(Zone)都分配了hot cache和cold cache,hot cache用来缓存那些很可能被CPU的硬件缓存收纳了的页。

    hot/cold cache只处理单页分配的情况。

        1: /*
       2:  * Really, prep_compound_page() should be called from __rmqueue_bulk().  But
       3:  * we cheat by calling it from here, in the order > 0 path.  Saves a branch
       4:  * or two.
       5:  */
       6: static inline
       7: struct page *buffered_rmqueue(struct zone *preferred_zone,
       8:             struct zone *zone, int order, gfp_t gfp_flags,
       9:             int migratetype)
      10: {
      11:     unsigned long flags;
      12:     struct page *page;
      13:     int cold = !!(gfp_flags & __GFP_COLD);
      14:  
      15: again:
      16:     if (likely(order == 0)) {
      17:         struct per_cpu_pages *pcp;
      18:         struct list_head *list;
      19:  
      20:         local_irq_save(flags);
      21:         pcp = &this_cpu_ptr(zone->pageset)->pcp;
      22:         list = &pcp->lists[migratetype];
      23:         if (list_empty(list)) {
      24:             pcp->count += rmqueue_bulk(zone, 0,
      25:                     pcp->batch, list,
      26:                     migratetype, cold);
      27:             if (unlikely(list_empty(list)))
      28:                 goto failed;
      29:         }
      30:  
      31:         if (cold)
      32:             page = list_entry(list->prev, struct page, lru);
      33:         else
      34:             page = list_entry(list->next, struct page, lru);
      35:  
      36:         list_del(&page->lru);
      37:         pcp->count--;
      38:     } else {
      39:         if (unlikely(gfp_flags & __GFP_NOFAIL)) {
      40:             /*
      41:              * __GFP_NOFAIL is not to be used in new code.
      42:              *
      43:              * All __GFP_NOFAIL callers should be fixed so that they
      44:              * properly detect and handle allocation failures.
      45:              *
      46:              * We most definitely don't want callers attempting to
      47:              * allocate greater than order-1 page units with
      48:              * __GFP_NOFAIL.
      49:              */
      50:             WARN_ON_ONCE(order > 1);
      51:         }
      52:         spin_lock_irqsave(&zone->lock, flags);
      53:         page = __rmqueue(zone, order, migratetype);
      54:         spin_unlock(&zone->lock);
      55:         if (!page)
      56:             goto failed;
      57:         __mod_zone_page_state(zone, NR_FREE_PAGES, -(1 << order));
      58:     }
      59:  
      60:     __count_zone_vm_events(PGALLOC, zone, 1 << order);
      61:     zone_statistics(preferred_zone, zone, gfp_flags);
      62:     local_irq_restore(flags);
      63:  
      64:     VM_BUG_ON(bad_range(zone, page));
      65:     if (prep_new_page(page, order, gfp_flags))
      66:         goto again;
      67:     return page;
      68:  
      69: failed:
      70:     local_irq_restore(flags);
      71:     return NULL;
      72: }
    

    buffered_rmqueue用于从冷热分配器中分配单页的缓存页。

    如果gfp_flags中指定的__GFP_COLD,则从冷缓存中分配一页,否则,从热缓存中分配。

    本文地址:https://www.linuxprobe.com/?p=136414

    展开全文
  • Linux系统清除缓存【整理】

    万次阅读 2017-04-26 00:04:03
    Linux系统中,为了提高文件系统性能,内核利用一部分物理内存分配出缓冲区,用于缓存系统操作和数据文件,当内核收到读写的请求时,内核先去缓存区找是否有请求的数据,有就直接返回,如果没有则通过驱动程序直接...

    1)缓存机制介绍
    在Linux系统中,为了提高文件系统性能,内核利用一部分物理内存分配出缓冲区,用于缓存系统操作和数据文件,当内核收到读写的请求时,内核先去缓存区找是否有请求的数据,有就直接返回,如果没有则通过驱动程序直接操作磁盘。
    缓存机制优点:减少系统调用次数,降低CPU上下文切换和磁盘访问频率。
    CPU上下文切换:CPU给每个进程一定的服务时间,当时间片用完后,内核从正在运行的进程中收回处理器,同时把进程当前运行状态保存下来,然后加载下一个任务,这个过程叫做上下文切换。实质上就是被终止运行进程与待运行进程的进程切换。

    2)查看缓存区及内存使用情况

    1
    2
    3
    4
    5
    [root@localhost ~]# free -m
                 total       used       free     shared    buffers     cached
    Mem:          7866       7725        141         19         74       6897
    -/+ buffers/cache:        752       7113
    Swap:        16382         32      16350

    从上面的命令结果显示中可以看出:内存总共8G,已使用7725M,剩余141M,不少的人都是这么看的。
    但其实这样并不能作为实际的使用率。因为有了缓存机制,具体算法如下:
    空闲内存=free(141)+buffers(74)+cached(6897)
    已用内存=total(7866)-空闲内存
    由此算出空闲内存是7112M,已用内存754M,这才是真正的使用率,也可参考-/+ buffers/cache这行信息也是内存正确使用率。

    3)缓存区分buffers和cached区别
    内核在保证系统能正常使用物理内存和数据量读写情况下来分配缓冲区大小。
    buffers用来缓存metadata及pages,可以理解为系统缓存,例如,vi打开一个文件。
    cached是用来给文件做缓存,可以理解为数据块缓存,例如,dd if=/dev/zero of=/tmp/test count=1 bs=1G 测试写入一个文件,就会被缓存到缓冲区中,当下一次再执行这个测试命令时,写入速度会明显很快。

    4)Swap用途
    Swap意思是交换分区,通常我们说的虚拟内存,是从硬盘中划分出的一个分区。当物理内存不够用的时候,内核就会释放缓存区(buffers/cache)里一些长时间不用的程序,然后将这些程序临时放到Swap中,也就是说如果物理内存和缓存区内存不够用的时候,才会用到Swap。
    swap清理:
    swapoff -a && swapon -a
    注意:这样清理有个前提条件,空闲的内存必须比已经使用的swap空间大

    5)释放缓存区内存的方法
        a)清理pagecache(页面缓存)

    1
    # echo 1 > /proc/sys/vm/drop_caches     或者 # sysctl -w vm.drop_caches=1

      b)清理dentries(目录缓存)和inodes

    1
    # echo 2 > /proc/sys/vm/drop_caches     或者 # sysctl -w vm.drop_caches=2

      c)清理pagecache、dentries和inodes

    1
    # 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)对象和它们占用的内存

    1
    # sync

    --------------------友情提示一下----------------------
    上面操作在大多数情况下都不会对系统造成伤害,只会有助于释放不用的内存。
    但是如果在执行这些操作时正在写数据,那么实际上在数据到达磁盘之前就将它从文件缓存中清除掉了,这可能会造成很不好的影响。那么如果避免这种事情发生呢?
    因此,这里不得不提一下/proc/sys/vm/vfs_cache_pressure这个文件,告诉内核,当清理inoe/dentry缓存时应该用什么样的优先级。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    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,系统将会将缓存减少到一个合理的水平。


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

    /proc是一个虚拟文件系统,可以通过对它的读写操作作为与kernel实体间进行通信的一种手段。也就是说可以通过修改/proc中的文件,来对当前kernel的行为做出调整。也就是说我们可以通过调整/proc/sys/vm/drop_caches来释放内存。

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

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


    其他参考:

    http://www.cnblogs.com/kevingrace/p/5991604.html

    https://linux.cn/article-5627-weibo.html

    http://www.cnblogs.com/focai/p/5829897.html

    http://blog.csdn.net/u014227228/article/details/46848623

    展开全文
  • 清理缓存常用命令: 1.清理所有软件缓存: sudo apt-get clean 2.清理旧版本软件缓存: sudo apt-get autoclean 3.清理系统不再使用孤立软件 sudo apt-get autoremove   二.删除多余内核命令: 1....
  • Ubuntu如何清理系统垃圾

    万次阅读 2016-12-22 18:20:46
    Ubuntu Linux与Windows系统不同,Ubuntu Linux不会产生无用垃圾文件,但是在升级缓存中,Ubuntu Linux不会自动删除这些文件,今天就来说说这些垃圾文件清理方法。 1,非常有用的清理命令: sudo apt-get autoclean ...
  • 总结linux清理垃圾命令

    万次阅读 2014-11-03 21:33:47
    可以使用以下命令清理系统垃圾 sudo apt-get autoclean 清理旧版本的软件缓存 sudo apt-get clean 清理所有软件缓存 ...删除除了最新内核以外的其它文件,(比如2006-08-17 官方内核是 26,那就可以删除所有
  • 前段时间在开发一个使用SSD做缓存的系统,在高速写入数据时会出现大量的磁盘缓存。太多的磁盘缓存如果没有及时的写入磁盘中,在机器出现问题时是非常危险的,这样会导致很多的数据丢失,但是如果实时的将数据刷入...
  • Linux下垃圾清理方法总结

    万次阅读 2016-11-01 16:58:17
    linux和windows系统不同,linux不会产生无用垃圾文件,但是在升级缓存中,linux不会自动删除这些文件,还是很占硬盘的! 一、删除缓存 1,非常有用的清理命令: sudo apt-get autoclean 清理旧版本的软件缓存 ...
  • Ubuntu删除无用缓存及垃圾文件

    万次阅读 2013-07-08 10:21:35
    原文链接:http://fox-leon.iteye.com/blog/1305501linux和windows系统不同,linux不会产生无用垃圾文件,但是在升级缓存中,linux不会自动删除这些文件,还是很占硬盘的!一、删除缓存1,非常有用的清理命令:sudo ...
  • linux的五种IO模型

    千次阅读 2016-12-22 21:34:34
    linux的五种IO模型linux的五种IO模型 现在Linux有5种IO模型 举例:网络中socket的一个read()是个一个IO操作命令,具体流程如下 应用程序调用read命令,通知内核读取数据 内核创建文件描述符 内核从物理层收到读指令,从...
  • Ubuntu清理系统垃圾 命令

    万次阅读 2012-06-17 19:59:07
    Ubuntu Linux与Windows系统不同,Ubuntu Linux不会产生无用垃圾文件,但是在升级缓存中,Ubuntu Linux不会自动删除这些文件,今天就来说说这些垃圾文件清理方法。   1,非常有用的清理命令: sudo apt-get ...
  • Linux页高速缓存中脏页的概念

    千次阅读 2018-05-14 16:06:47
    脏页是Linux内核中的概念,因为硬盘的读写速度远赶不上内存的速度,系统就把读写比较频繁的数据事先放到内存中,以提高读写速度,这就叫高速缓存,linux是以页作为高速缓存的单位,当进程修改了高速缓存里的数据时,...
  • 在默认情况下ubuntu 会把我们通过apt-get 所安装的软件包保存在缓存文件夹里。我们可以把这个文件夹做个备份。如果需要重装Ubuntu时,可以把备份还原回去。这样就不需要连上网络去大量更新系统软件包了ubuntu apt-...
  • Linux下清除缓存

    千次阅读 2018-06-02 10:37:47
    当将数据写到文件上时,通常该数据先由内核复制到缓存中,如果该缓存尚未写满,则并不将其排入输出队列,而是等待其写满或者当内核需要重用该缓存以便存放其他磁盘块数据时,再将该缓存排入输出队列,然后待其到达队...
  • 可通过/proc/net/sockstat查看 cat /proc/net/sockstat sockets: used 159 TCP: inuse 49 orphan 0 tw 2 alloc 61 mem 487 UDP: inuse 0 mem 0 UDPLITE: inuse 0 ...FRAG: inuse 0 memory 0
  • 清理linux无用的依赖包或软件

    千次阅读 2018-10-12 14:10:49
    可以使用以下命令清理系统垃圾 sudo apt-get autoclean 清理旧版本的软件缓存 sudo apt-get clean ...删除除了最新内核以外的其它文件,(比如2006-08-17 官方内核是 26,那就可以删除所有 ...
  • linux内存管理之slab机制

    千次阅读 2016-10-06 10:17:05
    linux内核中伙伴系统用来管理物理内存,其分配的单位是页,但是向用户程序一样,内核也需要动态分配内存,而伙伴系统分配的粒度又太大。由于内核无法借助标准的C库,因而需要别的手段来实现内核中动态内存的分配...
  • linux下如何清理缓存

    万次阅读 2018-10-18 16:30:21
    linux的虚拟内存机制,很多时候回导致内存得不到及时释放,有时候内存很少了,kill了很多进程,但是内存还是没有释放,这时候可以尝试一下手动释放,linux是提供了这样的接口的。 echo 1 &gt; /proc/sys/vm/drop...
  • 内存管理(Linux内核源码分析)

    万次阅读 2017-07-12 10:03:52
    背景本篇博客试图通过linux内核源码分析linux的内存管理机制,并且对比内核提供的几个分配内存的接口函数。然后聊下slab层的用法以及接口函数。内核分配内存与用户态分配内存内核分配内存与用户态分配内存显然是不同...
1 2 3 4 5 ... 20
收藏数 130,815
精华内容 52,326
关键字:

linux内核缓存