Linux設備內存不足如何處理

[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 時間分配 三、論文寫作方法:…