Linux 系统如何释放内存

目录

一、查看内存使用情况

1、free命令

2、top命令

3、vmstat命令

二、内存不够使用的解决办法

1、内核缓存手动释放

2、终止占用高内存的无用进程

3、关闭闲置服务

4、清理无用程序和服务

5、硬件升级


我们linux服务器的内存经常会因为运行的服务过度而导致内存爆满,此时我们就需要想办法释放初一些内存来减轻服务器压力。

一、查看内存使用情况

最常用的是free命令

1、free命令

bash 复制代码
[root@localhost ~]# free   #以千字节的方式展示
              total        used        free      shared  buff/cache   available
Mem:        3861288      654952     1895904      929848     1310432     2050968
Swap:       4064252           0     4064252
[root@localhost ~]# free -m   #以M的方式展示
              total        used        free      shared  buff/cache   available
Mem:           3770         639        1851         908        1279        2002
Swap:          3968           0        3968
[root@localhost ~]# free -h    #以人类可可读的方式展示
              total        used        free      shared  buff/cache   available
Mem:           3.7G        639M        1.8G        908M        1.2G        2.0G
Swap:          3.9G          0B        3.9G





字段解释:
Mem:物理内存(就是你电脑 / 服务器插的内存条的总容量)
Swap: 交换分区(虚拟内存):从硬盘划分的一块空间,当物理内存不足时,系统会把部分内存数据 "换" 到这里
total:总大小
used:使用大小
free:剩余大小
shared:共享内存和由tmpfs使用
buff/cache:缓冲区(buffer)+ 缓存(cache)的总容量:系统为提升性能预留的 "临时内存"
available:实际可用的物理内存:= free + buff/cache 中可回收的部分(最关键的参考字段)




#buff/cache解释:

1. buffer(缓冲区)
定义:是内存中预留的一块区域,用于临时存储 "即将写入磁盘" 的数据。
作用:避免 CPU 频繁直接读写磁盘(磁盘速度远慢于 CPU),先把数据攒到 buffer 里,再一次性写入磁盘,提升整体效率。
典型场景:比如你复制一个大文件时,系统会先把文件数据放到 buffer 里,等攒够一定量再批量写入磁盘。
2. cache(缓存区)
定义:是内存中预留的一块区域,用于临时存储 "从磁盘读取过的数据"。
作用:避免 CPU 频繁重复读取磁盘(比如反复打开同一个文件),把读过的数据存在 cache 里,下次直接从内存读,大幅提升速度。
典型场景:比如你反复打开同一个文档,第一次读磁盘,之后几次都从 cache 里读,打开速度会快很多。

2、top命令

#这里展示了内存总量,剩余内存,使用的内存,以及缓冲区和缓存区的使用量

3、vmstat命令

二、内存不够使用的解决办法

1、内核缓存手动释放

1.1 /proc/sys/vm/drop_caches 这个为文件的作用是什么?

/proc 是 Linux 的伪文件系统,用于内核与用户空间的交互,里面的文件不是真实磁盘文件,而是内核状态的 "入口"。

/proc/sys/vm/drop_caches 是内核提供的一个 ** 手动清理内存缓存(buff/cache)** 的开关,通过向它写入不同数值,可以触发系统回收 buffcache 或两者的内存。

1.2 数值参数的含义

drop_caches 写入的数值代表不同的清理策略:

  • echo 1 > /proc/sys/vm/drop_caches:仅清理 page cache(文件页缓存,属于 cache 的一种,即从磁盘读取的文件数据缓存)。
  • echo 2 > /proc/sys/vm/drop_caches:仅清理 slab allocator(内核对象的缓存,比如 inode、dentry 等元数据的缓存)。
  • echo 3 > /proc/sys/vm/drop_caches:同时清理 page cache 和 slab allocator(即一次性回收所有可回收的 buff/cache 内存)。

1.3. 执行效果

执行 echo 3 > /proc/sys/vm/drop_caches 后,系统会主动回收所有可回收的 buffcache 内存 ,表现为 free 命令中 buff/cache 数值大幅减少,freeavailable 数值大幅增加。

2、终止占用高内存的无用进程

tophtop 找到 %MEM 占比高的进程,优先终止非核心进程(比如卡死的应用、闲置的服务):

  • 温和终止:kill PID(PID 是进程 ID,从 top 中查看);
  • 强制终止:kill -9 PID(仅用于进程无响应时,慎用系统服务)。

3、关闭闲置服务

systemctl stop 服务名 关闭暂时不用的服务(比如闲置的数据库、Web 服务),减少后台进程内存占用。

4、清理无用程序和服务

  • 卸载不常用软件:yum remove 软件名(CentOS)或 apt remove 软件名(Ubuntu),减少开机自启的后台进程。
  • 禁用不必要的开机自启服务:用 systemctl disable 服务名(比如闲置的 ftp、telnet 服务),避免开机就占用内存。

5、硬件升级

  1. 增加物理内存(优先选择):给服务器 / 电脑加装内存条,这是最直接、效果最好的方式。比如你当前物理内存 3.7GB,可升级到 8GB 或 16GB,根据业务需求选择(比如运行数据库、虚拟机,建议至少 8GB 以上)。
  2. 扩容 Swap 分区(临时过渡) :如果暂时无法加内存,可扩大 Swap 分区(虚拟内存),但注意 Swap 依赖硬盘,速度远慢于物理内存,仅适合临时过渡。比如用 fallocate -l 4G /swapfile 创建 4GB Swap 文件,再通过 mkswapswapon 启用(需配置 /etc/fstab 永久生效)。
相关推荐
阿钱真强道2 小时前
02-COAP ubuntu 下 coap 使用及测试
运维·服务器
最贪吃的虎2 小时前
JVM扫盲:内存模型
java·运维·jvm·后端
网安INF2 小时前
防火墙的分类与部署详解
服务器·安全·网络安全·防火墙
DO_Community2 小时前
DigitalOcean推出AI智能体开发套件(ADK),让你的 AI Agent 从原型走向可用
服务器·人工智能·ai·agent·mcp
图乐aj2 小时前
运维工程师技能之JVM
运维·jvm
春天的菠菜2 小时前
【jenkins】使用匿名访问访问jenkins的项目
运维·jenkins
xuhe22 小时前
[重磅更新] 支持最新 Overleaf 6.x!我的私有化部署方案 xuhe2/sharelatex-ce 迎来大升级
linux·docker·github·科研·overleaf
zhuzewennamoamtf2 小时前
Linux驱动实现DMA支持
linux·spring boot·spring
一个平凡而乐于分享的小比特2 小时前
硬链接(ln) vs 复制(cp)的详细区别
linux·复制·硬链接·cp·ln