作者:Darren_Wen链接:https://blog.51cto.com/wendas...本文介绍了Linux内存机制、虚拟内存swap、buffer的原理和实际操作/缓存释放等。1、linux的内存机制是什么?我们知道直接从物理内存读写数据比从硬盘读写数据要快很多。因此,我们希望所有的数据读写都在内存中完成,而内存是有限的,这就产生了物理内存和虚拟内存的概念。物理内存是系统硬件提供的内存大小。是真实的记忆。相对于物理内存,Linux下还有一个虚拟内存的概念。虚拟内存是为满足物理内存不足而提出的一种策略。它使用磁盘空间虚拟出一块逻辑内存,用作虚拟内存的磁盘空间称为交换空间(SwapSpace)。作为物理内存的扩展,Linux会在物理内存不足的时候使用swap分区的虚拟内存。更具体地说,内核会将暂时不用的内存块信息写入交换空间,从而释放物理内存。这块内存然后可以用于其他目的,当需要原始内容时,信息将从交换空间重新读取到物理内存中。Linux的内存管理采用分页访问机制。为了保证物理内存能够得到充分利用,内核会在适当的时候自动将物理内存中不常用的数据块交换到虚拟内存中,将经常使用的数据块信息持久化到物理内存中。要深入了解linux内存运行机制,需要了解以下几个方面:换出暂时未使用的内存页。这避免了等待交换所需的时间。Linux有条件地执行页面交换。并非所有页面在不使用时都交换到虚拟内存。linux内核只是按照“最近最频繁使用”的算法,将一些不经常使用的页面文件交换到虚拟内存中。有时候我们会看到有这样一种现象:Linux中物理内存还是很多的,但是交换空间也有很多被使用。其实,这并不奇怪。例如,一个占用大量内存的进程在运行时,需要消耗大量的内存资源。当进程结束释放大量内存时,刚才换出的页面文件不会自动换入物理内存。除非必要,此时系统的物理内存会空闲很多,交换空间也在同时被使用。刚才提到的现象出现了。对此,没有什么好担心的,只要知道是怎么回事就可以了。交换空间的页面在使用时会先交换到物理内存中。如果此时没有足够的物理内存容纳这些页面,它们将被立即换出。因此,虚拟内存中可能没有足够的空间来存储这些交换。page最终会导致linux中的假崩溃、服务异常等问题。虽然linux可以在一段时间内自行恢复,但恢复后的系统基本无法使用。因此,合理规划和设计Linux内存的使用是非常重要的。在Linux操作系统中,当应用程序需要读取文件中的数据时,操作系统首先分配一些内存,并将数据从磁盘读取到内存中,然后将数据分发给应用程序;当数据需要写入文件时,操作系统首先分配内存来接收用户数据,然后将内存中的数据写入磁盘。但是,如果大量的数据需要从磁盘读取到内存或者从内存写入磁盘,那么系统的读写性能就会变得很低,因为无论是从磁盘读取数据还是将数据写入磁盘,这是一个非常缓慢的过程。消耗时间和资源的过程。在这种情况下,Linux引入了缓冲区和缓存机制。buffers和cached都是内存操作,用于保存系统已经打开的文件和文件属性信息,这样当操作系统需要读取一些文件时,会先在buffers和cached内存区域中查找,并如果找到,直接读出发送给应用程序。如果没有找到需要的数据,就会从磁盘中读取。这就是操作系统的缓存机制。通过缓存,大大提高了操作系统的性能。但是缓冲区和缓存缓冲区的内容是不同的。缓冲区用于缓冲块设备。它只记录元数据和跟踪文件系统的飞行页面,而缓存用于缓冲文件。通俗点说:缓冲区主要用来存放目录里有什么,文件的属性和权限等等。cached直接用来记住我们打开过的文件和程序。为了验证我们的结论是否正确,可以通过vi打开一个非常大的文件,看看缓存中的变化,然后再次vi这个文件,感受一下两种打开速度的异同,速度的快慢第二次打开明显比第一次快?然后执行以下命令:find/-name.conf看buffers的值有没有变化,然后反复执行find命令,看两者显示速度的区别。2、Linux是什么时候开始使用虚拟内存(swap)的?[root@wenwen~]#cat/proc/sys/vm/swappiness60上面的60表示物理内存使用到40%时才会使用物理内存(参考网络资料:当剩余物理内存低于40%(40=100-60),开始使用swap空间)当swappiness=0时,表示物理内存使用到最大,然后是swap空间,当swappiness=100时,表示swap分区被主动使用,内存上的数据及时移动到空间内部的swap。值越大,越倾向于使用swap。可以设置为0,不禁止使用swap,只是将使用swap的可能性降到最低。通常情况下,建议swap分区设置为内存大小的两倍(当内存小于等于4G时),如果内存大于4G,swap需要大于内存。另外尽量降低swappiness,这样系统的性能会更好。B、修改swappiness参数#临时修改:[root@wenwen~]#sysctlvm.swappiness=10vm.swappiness=10[root@wenwen~]#cat/proc/sys/vm/swappiness10#永久修改:[root@wenwen~]#vim/etc/sysctl.conf添加参数:vm.swappiness=35然后直接:[root@wenwen~]#sysctl-p/etc/sysctl.conf#查看是否生效:cat/proc/sys/vm/swappiness35立即生效,重启也可以生效。3.如何释放内存?一般系统是关键的配置文件/proc/sys/vm/drop_caches,不会自动释放内存。该文件记录了缓存释放的参数,默认值为0,即不释放缓存。它的值可以是0到3之间的任意数字,分别代表不同的含义:0-不释放1-释放pagecache2-释放dentries和inode3-释放所有缓存实际操作:明显有很多空闲内存4.如何释放交换?前提:首先保证剩余内存大于等于swap使用,否则会死机!根据内存机制,一旦swap分区被释放,swap分区中存放的所有文件都会被转移到物理内存中。释放交换空间通常是通过重新挂载交换分区来完成的。A。检查当前交换分区挂载在哪里?b.关闭这个分区c.检查状态:d.查看swap分区是否关闭,最下面一行显示全e。将swap挂载到/dev/sda5f。查看是否挂载成功
