目录
我们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)** 的开关,通过向它写入不同数值,可以触发系统回收 buff、cache 或两者的内存。
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 后,系统会主动回收所有可回收的 buff 和 cache 内存 ,表现为 free 命令中 buff/cache 数值大幅减少,free 或 available 数值大幅增加。
2、终止占用高内存的无用进程
用 top 或 htop 找到 %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、硬件升级
- 增加物理内存(优先选择):给服务器 / 电脑加装内存条,这是最直接、效果最好的方式。比如你当前物理内存 3.7GB,可升级到 8GB 或 16GB,根据业务需求选择(比如运行数据库、虚拟机,建议至少 8GB 以上)。
- 扩容 Swap 分区(临时过渡) :如果暂时无法加内存,可扩大 Swap 分区(虚拟内存),但注意 Swap 依赖硬盘,速度远慢于物理内存,仅适合临时过渡。比如用
fallocate -l 4G /swapfile创建 4GB Swap 文件,再通过mkswap、swapon启用(需配置/etc/fstab永久生效)。