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

Linux如何使用內存(這不是您的想法)
Linux最誤解的方面之一是它如何報告內存使用情況。如果您free
運行或查看top
之類的工具,則可能會看到類似的東西:
總二手免費共享buff/Cache可用 mem:8000 6500 200 300 1300 6200
乍一看,看起來6500 MB已被“使用”,但這並不意味著您的系統已經用盡了內存。 Linux將未使用的RAM用於緩衝區和緩存(例如磁盤緩存),這些RAM是可回收的。這意味著如果應用程序需要更多內存,可以立即釋放它們。

關鍵要點:
- 使用≠完整
- 可用的是真正使用多少內存應用程序的真正指標。
虛擬內存和分頁
Linux使用虛擬內存,這意味著每個過程都認為它具有自己的全部內存地址(例如,32位的0到4GB,在64位上有更多)。這是由MMU(內存管理單元)和頁面表管理的。

重要概念:
- 頁面:記憶分為小塊(通常為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 -h
或htop
比top
更清晰的視圖。 - 檢查交易使用情況:
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中文網其他相關文章!

熱AI工具

Undress AI Tool
免費脫衣圖片

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

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

Clothoff.io
AI脫衣器

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

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

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

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

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

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

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

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

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

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

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