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 永久生效)。
相关推荐
夏殇之殁40 分钟前
包中创建自定义列表项。 . 使用自定义列表项进行数据绑定 . 将天气预报数据保存到本地内存表,通过LiveBindings进行显示。 ...
服务器·前端·javascript
龙仔72541 分钟前
人大金仓 KingbaseES V8 只读账号创建完整运维笔记
运维·笔记·sql·人大金仓
我不管我就要叫小猪1 小时前
嵌入式Linux----网络通信
linux·运维·服务器
江湖有缘1 小时前
Docker实战 :使用Docker部署OneTerm堡垒机
运维·docker·容器
泡沫冰@1 小时前
ECS 的介绍和使用
linux·服务器·网络
姜太小白2 小时前
【Linux】df -h 卡住问题的通用排查与解决方案总结
linux·运维·php
土星云SaturnCloud2 小时前
抽水蓄能设备智慧运营:基于土星云边缘计算实现机组全生命周期预测性维护
服务器·人工智能·ai·边缘计算
fengyehongWorld2 小时前
Linux 终端快捷键
linux·运维
看昭奚恤哭3 小时前
平滑加权轮询负载均衡的底层逻辑
运维·负载均衡
hyf3266333 小时前
泛程序:从零开始搭建稳定程序项目框架
运维·服务器·爬虫·百度·seo