[root@localhost ~]# free -mtotal        used        free      shared  buff/cache   available
Mem:           31208       14317        1280        1551       15610       14657
Swap:          15927        2781       13146
[root@localhost ~]#

free -m 输出来看,当前系统并非物理内存完全耗尽(物理内存 free 为 1280MB,available 为 14657MB),但存在「内存使用偏高、空闲内存较少」的情况。核心原因是 Linux 会主动利用空闲内存作为 buff/cache(缓存文件/目录元数据、磁盘读写数据)以提升性能,因此需先区分「真实内存不足」和「缓存占用过高」,再针对性处理。

一、先理解当前内存状态(关键指标解读)

指标数值(MB)含义解读
total31208物理内存总大小(约 30.5GB)
used14317已被进程实际占用的内存(不含缓存)
free1280完全空闲的内存(未被任何进程/缓存使用)
buff/cache15610缓存(page cache)+ 缓冲区(buffer),可被内核主动回收(不影响进程)
available14657真正可分配给新进程的内存(= free + 可回收的 buff/cache),当前充足
Swap used2781已使用的交换分区(约 2.7GB),说明部分内存数据已交换到磁盘(需关注)

二、分场景处理方案

场景1:临时释放缓存(buff/cache 占用过高,需快速腾内存)

Linux 的 buff/cache 是「可回收资源」,当系统需要内存时内核会自动回收,但也可手动触发释放(无风险,不影响运行中进程)。

执行以下命令释放缓存(需 root 权限):

# 1. 释放页缓存(page cache,最主要的缓存类型)
echo 1 > /proc/sys/vm/drop_caches# 2. 释放页缓存 + 目录项缓存(dentries)+ inode 缓存
echo 2 > /proc/sys/vm/drop_caches# 3. 释放所有可回收缓存(推荐,释放最彻底)
echo 3 > /proc/sys/vm/drop_caches

执行后再次用 free -m 查看,会发现 free 内存增加,buff/cache 减少(例如从 15GB 降至几 GB)。

场景2:排查高内存占用进程(找到“内存大户”)

used 内存持续过高(如超过 80%),需定位具体是哪些进程消耗内存,判断是否为异常占用(如内存泄漏、不合理的进程配置)。

步骤1:查看进程内存占用(按内存使用率排序)
# 方法1:用 top 实时查看(按「M」键切换为内存使用率排序)
top# 方法2:用 ps 输出详细内存占用(按 %MEM 降序,显示前20个进程)
ps -aux --sort=-%mem | head -n 20
关键指标解读(ps 输出中):
  • %MEM:进程占用的物理内存百分比(核心参考);
  • VSZ:进程虚拟内存大小(含共享库、交换区,参考意义低);
  • RSS:进程实际占用的物理内存大小(不含缓存,真实内存消耗)。
处理高内存进程:
  1. 正常进程(如数据库、应用服务)
    若进程内存增长合理(如 MySQL 缓存数据),可检查其配置是否过高(例如 JVM 的 -Xmx 设太大、MySQL 的 innodb_buffer_pool_size 超过物理内存 50%),适当下调配置(需重启进程生效)。

  2. 异常进程(如无名进程、内存泄漏进程)
    若进程无正常用途(如僵尸进程、恶意进程),或内存持续增长不释放(内存泄漏),可先尝试优雅停止(如 systemctl stop 服务名),若无法停止则强制杀死(kill -9 进程PID),并排查进程来源(避免再次启动)。

场景3:优化交换分区(Swap)使用

当前 Swap 已使用 2.7GB,若物理内存仍充足却频繁使用 Swap,会导致系统性能下降(磁盘速度远慢于内存),需调整内核参数减少 Swap 依赖。

1. 查看当前 Swap 使用率和内核参数
# 查看 Swap 详细使用(哪些进程用了 Swap)
for i in $(cd /proc; ls -d [0-9]*); do echo -n "$i "; grep VmSwap /proc/$i/status 2>/dev/null; done | sort -k 2 -n -r | head -n 10# 查看内核 Swap 调整参数(swappiness)
cat /proc/sys/vm/swappiness
  • swappiness 含义:内核使用 Swap 的倾向,取值 0-100(值越高越容易用 Swap);
    推荐设置:物理内存充足时设为 10-20(减少 Swap 使用),内存紧张时设为 50-60。
2. 临时调整 swappiness(重启后失效)
echo 10 > /proc/sys/vm/swappiness
3. 永久调整 swappiness(重启生效)

编辑 /etc/sysctl.conf 文件,添加或修改以下行:

vim /etc/sysctl.conf
# 添加:
vm.swappiness = 10# 生效配置
sysctl -p
场景4:长期优化(避免内存不足反复出现)
  1. 升级物理内存(根本方案)
    若系统长期 available 内存低于 20%,且高内存进程是业务必需(如大数据服务、多虚拟机),建议增加物理内存(如从 32GB 升级到 64GB),这是最彻底的解决方式。

  2. 优化应用配置(减少不必要的内存占用)

    • 对于 Java 应用:调整 JVM 参数(-Xms 初始堆、-Xmx 最大堆),避免堆内存设太大导致浪费(例如 32GB 内存的机器,-Xmx 建议不超过 16GB);
    • 对于数据库(MySQL/MongoDB):缓存参数(如 innodb_buffer_pool_size)建议设为物理内存的 40%-50%(避免独占过多内存);
    • 对于Web服务(Nginx/Apache):限制并发进程/线程数(如 Nginx 的 worker_processes 设为 CPU 核心数,避免过多进程占用内存)。
  3. 清理无用进程/服务
    检查系统中是否有长期闲置的服务(如 postfixtelnet、无用的监控插件),停止并禁用其开机启动:

    # 查看开机启动服务
    systemctl list-unit-files --type=service | grep enabled# 停止并禁用无用服务(例如禁用 postfix)
    systemctl stop postfix
    systemctl disable postfix
    
  4. 监控内存变化(提前预警)
    nmonglancesprometheus + grafana 搭建内存监控,当 available 内存低于 10% 时触发告警,避免内存耗尽导致进程崩溃。

三、注意事项

  1. 不要盲目关闭缓存buff/cache 是 Linux 提升磁盘性能的关键,手动释放后若系统再次读写磁盘,缓存会重新增长(属于正常现象),无需频繁释放;
  2. 谨慎使用 kill -9:强制杀死进程可能导致数据丢失(如未保存的数据库事务),优先尝试优雅停止(如 kill 进程PID 或服务管理命令);
  3. Swap 并非越多越好:交换分区过大(如超过物理内存 2 倍)会导致系统过度依赖磁盘,反而降低性能,建议根据实际内存需求设置(一般为物理内存的 1-1.5 倍)。

通过以上步骤,可先临时释放缓存缓解内存压力,再定位高内存进程并优化配置,最终结合长期监控和硬件升级,彻底解决 Linux 内存不足问题。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/news/921930.shtml
繁体地址,请注明出处:http://hk.pswp.cn/news/921930.shtml
英文地址,请注明出处:http://en.pswp.cn/news/921930.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

中间件八股

文章目录RedisRedis为什么快?Redis Redis为什么快? 首先它是内存数据库,所有数据直接操作内存而非磁盘,避免了 I/O 瓶颈;其次采用单线程模型,消除了多线程切换的开销,同时通过非阻塞 I/O 多路…

【参数详解与使用指南】PyTorch MNIST数据集加载

# 加载MNIST数据集 train_dataset datasets.MNIST(root./data, trainTrue, downloadTrue, transformtransform) # 下载训练集 test_dataset datasets.MNIST(root./data, trainFalse, downloadTrue, transformtransform) # 下载测试集在深度学习入门过程中,MNIST手…

闭包面试题

闭包(Closure) 是指一个函数能够记住并访问其词法作用域(定义时的作用域),即使该函数在其词法作用域之外执行。一、通俗理解(面试可这样开头):> 闭包就是一个函数“记住”了它出生…

WebSocket 双向通信实战:SCADA 移动端实时操控响应优化

引言:SCADA 移动端的 “延迟烦恼” 与破局之道在电力调度、水厂监控、智能制造等场景中,SCADA 系统(数据采集与监视控制系统)是当之无愧的 “工业指挥官”—— 它能实时采集设备运行数据(如电网负荷、水泵压力、机床转…

SafeEar:浙大和清华联合推出的AI音频伪造检测框架,错误率低至2.02%

本文转载自:https://www.hello123.com/safeear ** 一、🔒 SafeEar:你的声音 “防火墙”,让 AI 伪造音频无所遁形 担心自己的声音被 AI 模仿甚至伪造?SafeEar就是来帮你解决这个难题的!它是由浙江大学和清…

uni-app iOS 日志与崩溃分析全流程 多工具协作的实战指南

在 uni-app 跨平台开发中,iOS 应用的日志与崩溃分析往往是开发者最头疼的问题。 日志分散:uni-app 的 JS 日志、原生插件日志、系统日志分布在不同位置;崩溃难复现:用户反馈的崩溃往往无法在开发机还原;符号化复杂&…

CSS定义网格的列模板grid-template-columns什么意思,为什么要用这么复杂的单词

这个词确实看起来复杂,但其实很好理解。让我来拆解一下:单词分解grid-template-columns grid - 网格template - 模板columns - 列连起来就是:网格模板列 → 定义网格的列模板为什么要用这么长的单词?语义明确:长单词能…

Umi-OCR:Windows7和Linux上可免费离线使用的OCR应用!

工具介绍 Umi-OCR 是一款免费、开源的离线OCR软件,主要由作者 hiroi-sora 用业余时间在开发和维护。 Umi-OCR 内置多国语言库,支持截屏/批量导入图片,PDF文档识别,排除水印/页眉页脚以及二维码的扫描/生成。 适用平台&#xff1…

30 分钟让 AI 开口查订单:React-Native + Coze 全链路语音对话落地指南

一、前言:为什么你需要“可说话、能查库”的 AI? 聊天机器人在 2025 已不新鲜,但**“张嘴就能查询私有业务数据”**的端到端方案依然踩坑无数: ASR/TTS 选型多、SDK 难对齐大模型与内部 API 安全打通RN 端流式渲染 音频播放并发…

玄机--应急响应--webshell查杀

靶场连接1.黑客webshell里面的flag flag{xxxxx-xxxx-xxxx-xxxx-xxxx}使用命令查找特殊文件//搜索目录下适配当前应用的网页文件,查看内容是否有Webshell特征 find ./ type f -name "*.jsp" -exec grep -l "exec(" {} \; find ./ type f -name &…

Nodejs读取目录下面的文件

需求:给定一个目录,读取该目录下面的所有文件,包括该目录下面文件夹里面的子文件,子子文件......const fs require(fs);const path require(path);// 指定要遍历的目录const directoryPath D:\\;//调用函数入口处readDir(direc…

PPTist,一个完全免费的 AI 生成 PPT 在线网站

PPTist,一个完全免费的 AI 生成 PPT 在线网站 PPTist 是一个完全免费的 AI 生成 PPT 在线网站、PPT 在线演示网站、PPT 在线编辑网站。 它完全免费,无需登录注册,支持 AI 生成 PPT 功能,可以一句话生成 PPT ,支持输入…

C++中操作重载与类型转换

文章目录基本概念调用选择作为成员还是非成员输入和输出运算符算术和关系运算符相等和不等运算符赋值运算符下标运算符递增和递减运算符成员访问运算符函数调用运算符lambda是函数对象标准库定义的函数对象可调用对象与function重载、类型转换与运算符类型转换运算符避免有二义…

Java学习之——“IO流“的进阶流之转换流的学习

在博主的上一篇博文中,详细的介绍了“IO”流中最基本的一些知识,包括基本的常见的字节流和字符流,以及对应的缓冲流,对于“IO”流基础知识相对薄弱的同学可以先去看博主的上一篇博文Java学习之——万字详解“IO流”中基本的字节流…

PMP考试结构、学习框架与基本术语

一、PMP考试整体结构 考试基本信息 考试形式:纸笔考试(中国大陆地区)考试时长:230分钟(约4小时)题目数量:180道题 170道单选题(四选一)10道多选题包含5道非计分的试验题…

浅谈前端框架

在 Web 开发的演进过程中,前端框架扮演着越来越重要的角色。从早期的 jQuery 到如今的 React、Vue、Svelte 等,前端开发模式发生了翻天覆地的变化。本文将从前端框架的定义、核心特性、分类以及主流框架的差异等方面,带你深入理解前端框架。 …

10.3 马尔可夫矩阵、人口和经济

本节内容是关于正矩阵(postive matrices): 每个元素 aij>0a_{ij}>0aij​>0,它核心的结论是:最大的特征值为正实数,其对应的特征向量也是如此。 在经济学、生态学、人口动力系统和随机游走过程中都…

python学习进阶之面向对象(二)

文章目录 1.面向对象编程介绍 2.面向对象基本语法 3.面向对象的三大特征 4.面向对象其他语法 1.面向对象编程介绍 1.1 基本概念 概念:面向对象编程(Object-Oriented Programming, OOP)是一种流行的编程范式,它以"对象"为核心组织代码和数据 在面向对象的世界里: …

VS+QT的编程开发工作:关于QT VS tools的使用 qt的官方帮助

加粗样式 最近的工作用到VS2022QT5.9.9/QT5.12.9,在查找相关资料的时候,发现Qt 官方的资料还是很不错的,特记录下来,要记得抽时间学习下。 Add Qt versions https://doc.qt.io/qtvstools/qtvstools-how-to-add-qt-versions.html B…

【系统分析师】第21章-论文:系统分析师论文写作要点(核心总结)

更多内容请见: 备考系统分析师-专栏介绍和目录 文章目录 一、写作注意事项:构建论文的合规性与专业性 1.1 加强学习 1.2 平时积累 1.3 提高打字速度 1.4 以不变应万变 二、试题解答方法:结构化应对策略 2.1 试题类型分析 2.2 三段式答题框架 2.3 时间分配 三、论文写作方法:…