首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

linux删除后为释放内存

在Linux系统中,当你删除一个文件后,该文件所占用的磁盘空间会被标记为可重用,但并不意味着立即释放内存。这是因为Linux内核使用了缓存机制来提高文件系统的性能。

基础概念

  1. 文件系统缓存:Linux内核会将经常访问的文件数据缓存在内存中,以提高读取速度。
  2. Page Cache:这是Linux内核用来缓存文件数据的主要机制,它将文件数据存储在内存页中。
  3. Inode Cache:除了文件数据,内核还会缓存文件的元数据(如文件权限、大小等),这些信息存储在inode cache中。

为什么删除文件后内存未释放?

当你使用rm命令删除一个文件时,实际上只是删除了文件系统的目录项,使得该文件不再可访问。但是,如果该文件的数据仍然被进程占用(例如,某个进程打开了该文件并仍在读取或写入),那么内核不会立即释放这些数据所占用的内存页。

如何释放内存?

  1. 关闭文件描述符:确保所有打开该文件的进程都已关闭文件描述符。可以使用lsof命令查看哪些进程打开了该文件,并使用kill命令终止这些进程。
  2. 关闭文件描述符:确保所有打开该文件的进程都已关闭文件描述符。可以使用lsof命令查看哪些进程打开了该文件,并使用kill命令终止这些进程。
  3. 手动清除缓存:作为管理员,你可以使用sync命令将缓存数据写入磁盘,然后使用echo命令清除page cache和inode cache。
  4. 手动清除缓存:作为管理员,你可以使用sync命令将缓存数据写入磁盘,然后使用echo命令清除page cache和inode cache。
  5. 注意:这种方法会影响系统性能,因为它会清除所有缓存,通常只在测试环境中使用。

应用场景

  • 系统维护:在进行大规模文件操作后,可能需要手动清除缓存以释放内存。
  • 性能调优:了解缓存机制有助于优化系统性能,特别是在高负载情况下。

示例代码

以下是一个简单的脚本示例,用于安全地清除缓存:

代码语言:txt
复制
#!/bin/bash

# 同步所有挂载的文件系统,确保所有数据写入磁盘
sync

# 清除page cache
echo 1 > /proc/sys/vm/drop_caches

# 清除dentries和inodes缓存
echo 2 > /proc/sys/vm/drop_caches

# 清除page cache、dentries和inodes缓存
echo 3 > /proc/sys/vm/drop_caches

在执行此脚本之前,请确保你有足够的权限,并且了解这可能对系统性能产生的影响。

通过以上方法,你可以有效地管理和释放Linux系统中的内存资源。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

linux 手动释放内存

在 Linux 系统中,内存管理通常由系统自动处理,但在某些情况下,手动释放内存可能是必要的。...例如,当业务应用比较繁忙时会频繁存取文件,物理内存会被缓存大量占用,有时会出现内存不足的情况发生,甚至会导致系统性能下降。此时可主动在业务闲时手动释放内存。...二、然后执行如下步骤手动释放内存■ 查看当前 drop_caches 的值cat /proc/sys/vm/drop_caches可能会提示权限不足,默认值为 0,表示不释放缓存■ 运行 sync 命令...:0:不释放(系统默认值)1:释放页缓存2:释放 dentries 和 inodes3:释放所有缓存■ 还原配置echo 0 > /proc/sys/vm/drop_caches释放完内存后,将 drop_caches...的值改回 0,让系统重新自动分配内存三、注意事项缓存机制Linux 的缓存机制非常先进,通常不需要手动释放内存。

6700

MySQL 删除数据不释放内存

DELETE 不释放磁盘空间 delete from table_name 原因 使用delete删除的时候,MySQL并没有把数据文件删除,只会将已经删除的数据标记为删除,因此并不会彻底的释放空间。...这些被删除的数据会被保存在一个链接清单中,当有新数据写入的时候,MySQL会利用这些已删除的空间再写入。 删除操作会带来一些数据碎片,正是这些碎片在占用硬盘空间。这些被标记为删除的记录,就是数据空洞。...删除数据释放内存方式 1、使用 drop 或 truncate drop table table_name; truncate table table_name; 2、OPTIMIZE optimize...2、删除特定的 binlog 文件 PURGE BINARY LOGS TO 'binlog文件名'; 这将删除指定文件名及其之前的所有binlog文件。...例如:如果要删除名为mysql-bin.000003的binlog文件及其之前的所有文件,可以运行以下命令: PURGE BINARY LOGS TO 'mysql-bin.000003'; 3、删除所有

61810
  • Linux-手动释放linux内存cache

    + cached 可用的memory=free memory+buffers+cached 当在Linux下频繁存取文件后,物理内存会很快被用光,当程序结束后,内存不会被正常释放,而是一直作为caching...那么我们可以通过调整/proc/sys/vm/drop_caches来释放内存。...,我还是原意去看swap的使用率和si/so两个值的大小; 用户常见的疑问是,为什么free这么小,是否关闭应用后内存没有释放?...而生产环境下的服务器可以不考虑手工释放内存,这样会带来更多的问题。记住内存是拿来用的,不是拿来看的。 我们看linux,只要不用swap的交换空间,就不用担心自己的内存太少。...如果常常swap用很多,可能你就要考虑加物理内存了,这也是linux看内存是否够用的标准.

    5.8K20

    Linux内存机制以及手动释放swap和内存

    今天我们来谈谈Linux的内存机制。 首先我们理一下概念 一、什么是linux的内存机制?...作为物理内存的扩展,linux会在物理内存不足时,使用交换分区的虚拟内存,更详细的说,就是内核会将暂时不用的内存块信息写到交换空间,这样以来,物理内存得到了释放,这块内存就可以用于其它目的,当需要用到原始的内容时...要深入了解linux内存运行机制,需要知道下面提到的几个方面: Linux系统会不时的进行页面交换操作,以保持尽可能多的空闲物理内存,即使并没有什么事情需要内存,Linux也会交换出暂时不用的内存页面...一般系统是不会自动释放内存的 关键的配置文件/proc/sys/vm/drop_caches。这个文件中记录了缓存释放的参数,默认值为0,也就是不释放缓存。...根据内存机制,swap分区一旦释放,所有存放在swap分区的文件都会转存到物理内存上。通常通过重新挂载swap分区完成释放swap。 a.查看当前swap分区挂载在哪? ? b.关停这个分区 ?

    7.6K41

    Linux文件后删除空间未释放问题

    当系统空间使用量过大需要清理空间或者清理某个文件时,有时会出现执行了删除命令之后磁盘空间并没有释放的情况。...很多人首次遇到该情况时会比较困惑,在考虑是不是像windows系统的回收站一样,删除只是逻辑删除到回收站一样?...其实不然,linux的回收站功能想了解的可以与我沟通或查资料了解一下,也是个比较实用的方法,此处我们主要实践文件删除后空间未释放问题。...此时删除 文件,再查看文件是否被删除,空间是否释放 /* 删除文件 */ [root@c7_2 local]# rm -f all_backup.tar.gz /* 查看磁盘空间,没有变化 */...03 结语 本主要适用于以下场景: 删除文件空间未释放 磁盘满了 但是找不到文件 再提示一遍,如果可以使用 echo " ">filename 命令在线清空文件,则无需暴力的结束进程,如果此方法无效时再考虑结束进程

    7.8K10

    C语言free释放内存后为什么指针里的值不变?竟然还可以输出?

    今天你家范儿给大家带来一个的东西——关于C语言为什么释放指针后,指向这块内存的指针的值不变问题的编程经验!!行了,咱们话不多少,直接上主食。...诸位,可得细看呦~ 想必大家都知道C语言中动态开辟内存之后,必须要释放内存,来防止内存泄露。也就是malloc之后,必须要free。...正所谓”有借有还,再借不难”, 不少同学会问为什么释放指针后,指向这块内存的指针的值不变呢,我们今天为大家揭秘。...首先,我们用malloc开辟一个内存,用strcpy拷贝一串字符串,然后释放掉,通过断点调试进行观察!...而关于free之后,p的之后为何没有改变,仍然还是这个原先堆空间的这个地址,原因在于free函数仅仅是将malloc申请的内存释放回去,所谓的释放也就是告诉编译器,这块内存已经使用完毕,可以收回了。

    2.7K80

    linux下清理系统缓存并释放内存

    当linux频繁读取文件后,物理内存会很快被用完,当程序结束后,内存不会被正常释放,而是一直caching,因此有必要手动清理系统缓存释放内存。...sync 命令将所有未写的系统缓冲区写到磁盘中,包含已修改的 i-node、已延迟的块 I/O 和读写映射文件 手动释放内存的命令 > echo 3>/proc/sys/vm/drop_caches...drop_caches的值可以是0-3之间的数字,代表不同的含义: 0:不释放(系统默认值) 1:释放页缓存 2:释放dentries和inodes 查看内存 > free -h total——总物理内存...used——已使用内存,一般情况这个值会比较大,因为这个值包括了cache+应用程序使用的内存 free——完全未被使用的内存 shared——应用程序共享内存 buffers——缓存,主要用于目录方面...,inode值等(ls大目录可看到这个值增加) cached——缓存,用于已打开的文件 恢复默认设置 缓存可以提升系统的运行效率,如果发现系统内存经常不够用,应该考虑添加内存,而不是经常清理 > echo

    5.8K10

    linux下清理系统缓存并释放内存

    当linux频繁读取文件后,物理内存会很快被用完,当程序结束后,内存不会被正常释放,而是一直caching,因此有必要手动清理系统缓存释放内存。...sync 命令将所有未写的系统缓冲区写到磁盘中,包含已修改的 i-node、已延迟的块 I/O 和读写映射文件 手动释放内存的命令 > echo 3>/proc/sys/vm/drop_caches drop_caches...的值可以是0-3之间的数字,代表不同的含义:0:不释放(系统默认值) 1:释放页缓存 2:释放dentries和inodes 查看内存 > free -h total——总物理内存 used——已使用内存...,一般情况这个值会比较大,因为这个值包括了cache+应用程序使用的内存 free——完全未被使用的内存 shared——应用程序共享内存 buffers——缓存,主要用于目录方面,inode值等(ls.../vm/drop_caches 原文链接:https://rumenz.com/rumenbiji/linux_drop_caches.html

    6.8K30

    linux下清理系统缓存并释放内存

    当linux频繁读取文件后,物理内存会很快被用完,当程序结束后,内存不会被正常释放,而是一直caching,因此有必要手动清理系统缓存释放内存。...sync 命令将所有未写的系统缓冲区写到磁盘中,包含已修改的 i-node、已延迟的块 I/O 和读写映射文件 手动释放内存的命令 > echo 3>/proc/sys/vm/drop_caches drop_caches...的值可以是0-3之间的数字,代表不同的含义:0:不释放(系统默认值) 1:释放页缓存 2:释放dentries和inodes 查看内存 > free -h total——总物理内存 used——已使用内存...,一般情况这个值会比较大,因为这个值包括了cache+应用程序使用的内存 free——完全未被使用的内存 shared——应用程序共享内存 buffers——缓存,主要用于目录方面,inode值等(ls.../vm/drop_caches 原文链接:https://rumenz.com/rumenbiji/linux_drop_caches.html

    9.6K10

    DirectByteBuffer内存释放

    直接内存的释放,必须手工调用freeMemory方法,因为JVM只能帮我们管理堆内存,直接内存不在其管理范围之内。...DirectByteBuffer帮我们简化了直接内存的使用,我们不需要直接操作Unsafe类来进行直接内存的申请与释放,那么其是如何实现的呢?...直接内存的释放: DirectByteBuffer本身是一个Java对象,其是位于堆内存中的,JDK的GC机制可以自动帮我们回收,但是其申请的直接内存,不再GC范围之内,无法自动回收。...释放完直接内存的时候,也调用了Bits.unreserveMemory方法。...因为直接内存的释放与获取比堆内存更加耗时,每次创建DirectByteBuffer实例分配直接内存的时候,都调用System.gc,可以让已经使用完的DirectByteBuffer得到及时的回收。

    3.3K50

    Linux服务器如何释放内存空间

    Linux服务器运行一段时间后,由于其内存管理机制,会将暂时不用的内存转为buff/cache,这样在程序使用到这一部分数据时,能够很快的取出,从而提高系统的运行效率,所以这也正是Linux内存管理中非常出色的一点...,所以乍一看内存剩余的非常少,但是在程序真正需要内存空间时,Linux会将缓存让出给程序使用,这样达到对内存的最充分利用,所以真正剩余的内存是free+buff/cache 但是有些时候大量的缓存占据空间...,这时候应用程序回去使用swap交换空间,从而使系统变慢,这时候需要手动去释放内存,释放内存的时候,首先执行命令 sync 将所有正在内存中的缓冲区写到磁盘中,其中包括已经修改的文件inode、已延迟的块...所以根据上面的说明,分别将1,2,3这3个数字重定向到drop_caches中可以实现内存的释放,一般释放内存都是重定向3到文件中,释放所有的缓存 那么下面举个例子,比如这里只释放页缓存,首先使用 free...到这里内存就释放完了,现在drop_caches中的值为3,另外需要注意的是,在生产环境中的服务器我们不要频繁的去释放内存,只在必要时候清理内存即可,更重要的是我们应该从应用程序层面去优化内存的利用和释放

    23.3K10

    【Linux 内核 内存管理】物理页释放 ( 物理页释放 __free_pages 函数 )

    文章目录 一、物理页释放 __free_pages 函数 一、物理页释放 __free_pages 函数 ---- 页分配器 提供了 释放 物理页的 函数 __free_pages , 该函数定义在 Linux...内核源码的 linux-4.12\mm\page_alloc.c#4083 位置 ; __free_pages 函数参数分析 : struct page *page 参数 表示 要释放的 物理页 page...的 虚拟空间地址 ; unsigned int order 参数 表示 要释放的 物理页 的 " 阶数 " , 也就是 要释放的物理页大小 ; 阶 ( Order ) : 物理页 的 数量单位 ,...n 阶页块 指的是 2^n 个 连续的 " 物理页 " ; 参考 【Linux 内核 内存管理】伙伴分配器 ① ( 伙伴分配器引入 | 页块、阶 | 伙伴 ) __free_pages 函数源码...order == 0) free_hot_cold_page(page, false); else __free_pages_ok(page, order); } } 源码路径 : linux

    12.7K20

    Linux中删除文件,磁盘空间未释放问题追踪

    在客户使用我们产品后,发现一个问题:在删除了文件后,磁盘空间却没有释放。是有进程在打开这个文件,还是其他情况?我们一起来看看一下两个场景 一....当使用这个文件的进程结束后,文件才会真正的从磁盘删除,释放占有的空间。...这次客户在删除文件后,磁盘空间没有释放,通过"lsof"命令也没有找到正在占用此文件的进程。于是再次怀疑这是由于产品的内核模块早成的。...后经分析得到:在上一篇博文《Linux Kernel模块内存泄露查找 (2)》中解释过由于在产品内核模块中,对dentry引用,并使用完之后并没有对其引用计数减1,从而造成内存泄露。...在这种情况下,dentry不会被释放,则inode也就一直被引用着,从而也导致了即使删除文件,也不会从磁盘删除。

    3.4K21
    领券