目錄
虛擬內存和分頁
記憶區和分配
真正告訴你free
監視和調整技巧
首頁 系統教程 Linux 了解Linux內存管理

了解Linux內存管理

Aug 14, 2025 pm 09:23 PM
java 程式設計

Linux內存管理有效地利用RAM通過將自由存儲器視為緩存,其中“使用”並不意味著“完整”;關鍵指標是“可用”內存。 1。 Linux使用未使用的RAM用於緩衝區和緩存,當應用程序需要更多內存時,它們是可回收的。 2。虛擬內存允許每個進程使用通過頁面表映射到物理RAM的虛擬地址,並在需要時移動到交換空間。 3。互換可提高內存能力,但由於磁盤速度限製而降低了性能,並且Swappiness控制瞭如何使用積極交換。 4。物理內存分為區域(DMA,DMA32,正常,高級),以適應硬件地址限制。 5。夥伴分配器管理大型內存塊以減少碎裂化,而平板分配器處理小內核對象。 6。免費命令顯示總計,二手,免費,buff/緩存和可用內存,“可用”是新應用程序可用內存的真正指標。 7。監視工具,例如HTOP,SWAPON- -Show和DMESG | GREP -I OOM有助於跟踪記憶使用和OOM殺手活動。 8。 OOM殺手使用基於內存使用,運行時和特權的不良度分數在極端內存壓力下終止進程,並且可以通過/proc//oom_score_adj調諧。 9。使用Echo 1>/proc/sys/vm/drop_caches清除床,但不建議在生產中使用。 10。有效的內存管理涉及觀察可用的內存和交換活動,而不是僅依靠“使用”值,從而確保系統穩定性和性能。

了解Linux內存管理

Linux內存管理是一個複雜但結構良好的系統,旨在有效地使用可用的RAM,處理虛擬內存並確保在不同的工作負載下進行系統穩定性。這是它的工作原理和您需要知道的實際細分。

了解Linux內存管理

Linux如何使用內存(這不是您的想法)

Linux最誤解的方面之一是它如何報告內存使用情況。如果您free運行或查看top之類的工具,則可能會看到類似的東西:

 總二手免費共享buff/Cache可用
mem:8000 6500 200 300 1300 6200

乍一看,看起來6500 MB已被“使用”,但這並不意味著您的系統已經用盡了內存。 Linux將未使用的RAM用於緩衝區緩存(例如磁盤緩存),這些RAM是可回收的。這意味著如果應用程序需要更多內存,可以立即釋放它們。

了解Linux內存管理

關鍵要點:

  • 使用≠完整
  • 可用的是真正使用多少內存應用程序的真正指標。

虛擬內存和分頁

Linux使用虛擬內存,這意味著每個過程都認為它具有自己的全部內存地址(例如,32位的0到4GB,在64位上有更多)。這是由MMU(內存管理單元)和頁面表管理的。

了解Linux內存管理

重要概念:

  • 頁面:記憶分為小塊(通常為4KB)。
  • 頁面表:將虛擬地址映射到物理RAM。
  • 交換空間:當物理RAM緊密時,使用較少的頁面將移至磁盤(交換),釋放RAM。

雖然交換使系統在內存壓力下運行,但由於磁盤(尤其是HDD)比RAM慢得多,因此可能會損害性能。

您可以通過以下方式控制交換行為:

 #檢查當前的交換(0 =避免交換,100 =侵略性)
cat/proc/sys/vm/交換

#減少交換(建議使用大量RAM的系統)
sudo sysctl vm.swappiness = 10

記憶區和分配

Linux將物理內存分為區域以處理硬件限制:

  • DMA :對於只能訪問低內存(0-16MB)的舊設備。
  • DMA32 :類似,但對於64位系統上的32位地址。
  • 正常:大多數內核分配可用。
  • HighMem :(現在不太相關)在較舊的32位系統上,內存高於896MB。

內核使用不同的分配器:

  • 好友分配器:管理大量內存,減少外部碎片。
  • 平板分配器:處理小型,常用的內核對象(例如Inodes,task_structs)。

真正告訴你free

讓我們分解free -h的輸出:

場地意義
全部的總安裝RAM
用過的二手= total-免費 - buff/cache(但包括緩存!)
自由的完全未使用的RAM - 通常很小,因為Linux緩存了東西
buff/cache用於文件系統緩衝區和頁面緩存的內存 -可回收
可用的估計有多少內存可用於新應用程序 -這是重要的

因此,如果可用的話,您的系統很好 - 即使使用看起來很高。


監視和調整技巧

這是了解和管理內存的實用步驟:

  • 使用free -hhtoptop更清晰的視圖。
  • 檢查交易使用情況
     Swapon-展示
    免費-h |格雷普交換
  • 清除頁面緩存(僅用於測試)
    迴聲1>/proc/sys/vm/drop_caches#需要root

    (不要在生產中這樣做 - 緩存很有幫助!)

  • 監視記憶壓力
     #尋找OOM(內存外)殺手活動
    DMESG | grep -i“不記憶”
    Journalctl | grep -i oom

    OOM殺手:Linux開始殺死過程

    當內存嚴重且交換滿足時,Linux會調用OOM殺手終止過程並防止系統凍結。

    考慮到基於啟發式(不良得分)的“目標”:

    • 內存使用
    • 流程運行時(長期運行的過程有利)
    • 特權(根部流程較少)

    您可以通過寫入/proc/<pid>/oom_score_adj</pid> (-1000至1000)來調整每個過程的OOM行為。


    基本上,Linux對內存很聰明 - 它充滿了有用的緩存“未使用”的RAM,並且只有在可用內存下降的情況下才開始遇到真正的問題,或者開始交換thap thrash。觀察可用的內存交換活動,而不僅僅是“使用”數字。

    以上是了解Linux內存管理的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

熱門話題

PHP教程
1535
276
Excel查找並更換不工作 Excel查找並更換不工作 Aug 13, 2025 pm 04:49 PM

checkSearchSettingStingsTike“ matchentirecellcontents”和“ matchcase” byexpandingOptionsInfindReplace,確保“ lookin” insettovaluesand and“ tocorrectscope; 2.2.look forhiddenChindChareChideCharacterSorformattingTingtingTingTingBycopypopyBycopyingByingTextDextDirectly

如何部署Java應用程序 如何部署Java應用程序 Aug 17, 2025 am 12:56 AM

PrepareyourapplicationbyusingMavenorGradletobuildaJARorWARfile,externalizingconfiguration.2.Chooseadeploymentenvironment:runonbaremetal/VMwithjava-jarandsystemd,deployWARonTomcat,containerizewithDocker,orusecloudplatformslikeHeroku.3.Optionally,setup

如何在Java應用程序中配置記錄? 如何在Java應用程序中配置記錄? Aug 15, 2025 am 11:50 AM

使用SLF4J結合Logback或Log4j2是Java應用中配置日誌的推薦方式,通過添加對應Maven依賴引入API和實現庫;2.在代碼中通過SLF4J的LoggerFactory獲取日誌記錄器,使用參數化日誌記錄方法編寫解耦且高效的日誌代碼;3.通過logback.xml或log4j2.xml配置文件定義日誌輸出格式、級別、目標(控制台、文件)及包級別的日誌控制;4.可選啟用配置文件掃描功能實現日誌級別的動態調整,SpringBoot中還可通過Actuator端點管理;5.遵循最佳實踐,包括

XML數據與Java中的蓖麻結合 XML數據與Java中的蓖麻結合 Aug 15, 2025 am 03:43 AM

CastorenablesXML-to-Javaobjectmappingviadefaultconventionsorexplicitmappingfiles;1)DefineJavaclasseswithgetters/setters;2)UseUnmarshallertoconvertXMLtoobjects;3)UseMarshallertoserializeobjectsbacktoXML;4)Forcomplexcases,configurefieldmappingsinmappin

js添加元素到數組的開始 js添加元素到數組的開始 Aug 14, 2025 am 11:51 AM

在JavaScript中,向數組開頭添加元素最常用的方法是使用unshift()方法;1.使用unshift()會直接修改原數組,可添加一個或多個元素,返回添加後的數組新長度;2.若不想修改原數組,推薦使用擴展運算符(如[newElement,...arr])創建新數組;3.也可使用concat()方法,將新元素數組與原數組合併,返回新數組且不改變原數組;綜上,修改原數組時用unshift(),保持原數組不變時推薦擴展運算符。

績效比較:Java vs.去後端服務 績效比較:Java vs.去後端服務 Aug 14, 2025 pm 03:32 PM

GoTypeDeptersbetterruntimePerformanceWithHigherThrougherTuptuptudandlaterLatency,尤其是Fori/O-HevyServices,DuetoItslightWeightGoroutGoroutineSandefficientsCheduler,wherjava,whilejava,themlowertostart,bylowertostart,themlowertostart,canmatchgoincpuindtaskspu-boundtasksafterjitoptoptimization.2.gous.2.gous.2.gous.2.gous.2.gous.2.2.gome

如何在Java與JSON合作 如何在Java與JSON合作 Aug 14, 2025 pm 03:40 PM

Toworkwithjsoninjava,Usephird-Partylybrarylikejackson,Gson,Orjson-B,Asjavalacksbuilt-Insupport; 2.Fordeserialization,MapjSontojavaObjectsosiboseobjectsoblectsosivessobectssoblectmmapperinjacperinjacperinjacperinjacperinjacperinorgon.fromjson.fromjson; 3.forserialialial;

Java中的斷言關鍵字是什麼? Java中的斷言關鍵字是什麼? Aug 17, 2025 am 12:52 AM

TheassertkeywordinJavaisusedtovalidateassumptionsduringdevelopment,throwinganAssertionErroriftheconditionisfalse.2.Ithastwoforms:assertcondition;andassertcondition:message;withthelatterprovidingacustomerrormessage.3.Assertionsaredisabledbydefaultandm

See all articles