由于LINUX的内核机制,一般情况下不需要特意去释放已经使用的cache。这些cache起来的内容可以增加文件以及的读写速度。但在有些时候,如果物理内存全被使用了,有突发性物理内存消耗时就会有性能问题,如mysql数据库服务器。
先说下free命令怎么看内存
[root@tangj 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一下,防止丢数据。
cache内存释放(运行一次只是暂时回收,可以用crontal来定期执行 sync 和 相应的清理语句自动清理,以下操作在kernel 2.6.16以上的内核有效):
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一下,防止丢数据。
修改/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
上面的设置比较粗暴,使cache的作用基本无法发挥。需要根据机器的状况进行适当的调节寻找最佳的折衷。
/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,也就是 5 秒。如果你的系统是持续地写入动作,那么实际上还是降低这个数值比较好,这样可以把尖峰的写操作削平成多次写操
/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内存的倾向
/etc/sysctl.conf vm.dirty_ratio = 1 vm.dirty_background_ratio=1 vm.dirty_writeback_centisecs=1 vm.dirty_expire_centisecs=3 vm.drop_caches=3 vm.swapiness=100 vm.vfs_cache_pressure=133 vm.dirty_ratio = 5 #dft 20 % vm.dirty_background_ratio =5 #dft 10 % vm.dirty_writeback_centisecs=100 #dft 500 is 5s vm.dirty_expire_centisecs=300 #dft 30000 is 30s vm.drop_caches=3 #dft 0 vm.swappiness=100 #dft 60 vm.vfs_cache_pressure=133 #dft 100 vm.min_free_kbytes=204800 #200M mem save simple sysctl -w net.ipv4.route.flush=1
相关推荐
在Linux系统中,内存管理是操作系统的核心组成部分,它负责为各种进程分配和回收内存资源。在Linux内核中,内存的使用效率通过缓存(Cache)机制得到了显著提升。本篇文章将深入探讨Linux内存中的缓存分析,以及如何...
3. **VFS(Virtual File System)**:在Linux内核中,VFS是提供统一文件系统接口的层,它使得各种不同类型的文件系统可以共存,并且能透明地使用内存Cache。VFS抽象出了一套通用的操作,如打开、关闭、读取和写入...
在Linux操作系统中,理解应用程序如何使用内存是非常关键的,特别是对于系统管理员和开发者来说。本文将深入探讨Linux下应用程序的内存使用情况,并解析`top`命令和`free`命令提供的内存信息。 首先,当我们通过`...
本文将详细介绍如何在Linux环境下使用`top`命令查看CPU使用率,以及如何利用`free`命令监控内存状态。 #### 使用`top`命令查看CPU使用情况 `top`命令是一个实时的系统监视工具,它能够提供关于系统任务执行情况的...
在IT领域,内存管理是操作系统的核心组成部分,尤其是在x86架构下的Linux系统中。内存管理不仅关乎系统的性能,还直接影响到程序的运行效率和稳定性。本文将深入探讨x86架构下Linux系统的内存管理机制。 首先,x86...
本文将深入探讨Linux在X86平台上如何实现虚拟内存管理,包括虚拟地址空间的划分、页表机制、内存分配与回收、交换机制以及缓存管理。 1. 虚拟地址空间: 在X86架构下,Linux为每个进程分配了一个独立的4GB虚拟地址...
在深入探讨Linux内核的内存管理时,物理内存的分配与回收是至关重要的环节。Linux内核采用了一种高效的分配算法——伙伴系统(Buddy System),其核心在于将内存以4KB的页面为单位进行管理,并利用位图和链表来跟踪...
3. 内存回收:为防止内存泄漏,Linux使用了引用计数、垃圾回收策略以及 slab 分配器。slab 分配器预先分配一部分内存,用于快速分配和释放小对象,提高效率。 4. 交换与交换空间:当物理内存不足时,Linux会将不...
Linux操作系统采用了虚拟内存的概念,这使得应用程序无需关心物理内存的具体位置,而是通过虚拟地址空间来访问内存。虚拟内存的实现依赖于一系列复杂的数据结构和算法,以下是一些关键的数据结构: ##### 2.1 Page ...
当物理内存不足时,LRU会根据最近最少使用的页面进行淘汰,确保活跃度高的数据留在缓存中。 4. **VFS(Virtual File System)**:虚拟文件系统层支持多种文件系统,它抽象了各种文件系统的差异,提供了统一的接口。...
在 Linux 系统中,查看内存使用率是非常重要的,了解系统中的内存使用情况可以帮助我们更好地对系统进行优化和配置。下面我们将详细介绍如何使用 top 和 free 命令来查看系统中的内存使用情况。 1. 使用 top 命令...
1. 物理内存:在Linux中,物理内存是指计算机硬件中的RAM,分为用户空间和内核空间。用户空间供应用程序使用,内核空间由操作系统管理,执行内核功能。 2. 虚拟内存:Linux使用虚拟内存系统,使得每个进程都有自己...
当内存不足时,Linux会尝试回收不再使用的内存。这可能包括释放slab中的对象,或者在必要时触发OOM(Out of Memory)杀手,杀死占用内存最多的进程以释放资源。 为了避免OOM事件的发生,可以通过调整Linux的内存...
此外,内核还可以使用内存屏障(Memory Barrier)来确保缓存一致性,保证多处理器系统中的正确同步。 8. 垃圾回收: 对于特定类型的内存,如kmem_cache,内核实现了自动垃圾回收机制,当对象不再使用时,可以自动...
在Linux中,内存使用情况可以通过`free`命令查看。例如,输出显示了总内存(total)、已用内存(used)、空闲内存(free)、共享内存(shared)以及缓冲和缓存的大小。其中,“-/+ buffers/cache”行表示扣除缓冲和...
Linux内核负责物理内存的全局管理,包括伙伴系统(buddy allocator)用于分配和回收大块内存,slab 分配器用于缓存小对象,以及页缓存(page cache)来加速文件系统操作。 ### 内存管理实例 在实践中,了解内存...
2. 优化:避免不必要的全局变量,合理使用内存分配和释放,减少内存碎片。 总结,Linux虚拟内存管理是系统高效运行的关键,涉及地址映射、页面置换、内存分配等多个方面。理解和掌握这些知识点对于Linux系统管理员...
- **缓冲区**:在某些情况下,Linux会使用称为缓冲区(bounce buffers)的技术来处理高内存访问。 #### 十一、页帧回收 页帧回收部分探讨了Linux如何回收不再使用的页帧。 - **交换守护进程(kswapd)**:这是一个...
2. **伙伴系统 (Buddy System)**:这是一种高效的内存分配机制,主要用于分配和回收物理内存。 3. **基数树 (Radix Tree)**:基数树是一种用于管理大量数据结构的有效方法,在 Linux 内核中用于高效管理页表等数据...
Linux内存管理编程是操作系统核心部分的关键技术之一,它涉及到如何高效地分配、使用和回收内存资源。本实验旨在帮助你深入理解Linux环境下的内存管理机制,主要包括内存映射(mapping)和解除映射(unmapping),...