Heim > Artikel > Betrieb und Instandhaltung > Einführung in die Linux-Speicherverwaltung
Der Inhalt dieses Artikels besteht darin, die Linux-Speicherverwaltung vorzustellen, damit Sie die relevanten Kenntnisse der Linux-Speicherverwaltung verstehen. Es hat einen gewissen Referenzwert. Freunde in Not können sich darauf beziehen. Ich hoffe, es wird Ihnen hilfreich sein.
Wenn Sie unter Linux top, vmstat, free und andere Befehle verwenden, um die Speichernutzung des Systems oder Prozesses zu überprüfen, werden häufig buff/cache memeory, swap, avail Mem usw. angezeigt. Was bedeuten sie? ? Dieser Artikel befasst sich mit der Speicherverwaltung unter Linux und beantwortet diese Frage.
Bei der Diskussion der Speicherverwaltung unter Linux geht es eigentlich um die Implementierung des virtuellen Speichers unter Linux. Ich bin kein Kernel-Experte, daher wird dieser Artikel nur einige konzeptionelle Dinge vorstellen und nicht auf Implementierungsdetails eingehen nicht genau sein.
In den frühen Tagen war der physische Speicher relativ begrenzt, so dass der von Programmen nutzbare Speicherplatz den tatsächlichen physischen Speicher übersteigen könnte. Mit der Zeit tauchte jedoch das Konzept auf Die Bedeutung des virtuellen Speichers hat sich weit über die ursprüngliche Idee hinaus verändert.
Virtueller Speicher ist eine Technologie für Linux zur Speicherverwaltung. Es lässt jede Anwendung denken, dass sie über einen unabhängigen und kontinuierlich verfügbaren Speicherplatz (einen kontinuierlichen und vollständigen Adressraum) verfügt. Tatsächlich wird dieser jedoch normalerweise mehreren physischen Speichersegmenten zugeordnet, und einige werden vorübergehend extern auf der Festplatte gespeichert und dann geladen bei Bedarf in den Speicher speichern.
Die Größe der virtuellen Adresse, die jeder Prozess verwenden kann, hängt von der Anzahl der CPU-Bits ab. Auf einem 32-Bit-System beträgt die Größe des virtuellen Adressraums 4G 2^64=? (Kann es nicht herausfinden). Der tatsächliche physische Speicher kann viel kleiner sein als die Größe des virtuellen Adressraums.
Virtuelle Adressen stehen in engem Zusammenhang mit Prozessen. Dieselbe virtuelle Adresse in verschiedenen Prozessen verweist möglicherweise nicht unbedingt auf dieselbe physische Adresse. Daher macht es keinen Sinn, über virtuelle Adressen zu sprechen, ohne den Prozess zu verlassen.
Hinweis: Viele Artikel im Internet setzen virtuellen Speicher mit Swap-Speicherplatz gleich. Tatsächlich ist die Beschreibung nicht streng genug. Swap-Speicherplatz ist nur ein Teil des Gesamtbildes des virtuellen Speichers.
2. Die Beziehung zwischen virtuellem Speicher und physischem Speicher
Die Folgende Tabelle drückt die Beziehung zwischen ihnen sehr intuitiv aus:
进程X 进程Y +-------+ +-------+ | VPFN7 |--+ | VPFN7 | +-------+ | 进程X的 进程Y的 +-------+ | VPFN6 | | Page Table Page Table +-| VPFN6 | +-------+ | +------+ +------+ | +-------+ | VPFN5 | +----->| .... |---+ +-------| .... |<---+ | | VPFN5 | +-------+ +------+ | +------+ | +------+ | | +-------+ | VPFN4 | +--->| .... |---+-+ | PFN4 | | | .... | | | | VPFN4 | +-------+ | +------+ | | +------+ | +------+ | | +-------+ | VPFN3 |--+ | | .... | | | +--->| PFN3 |<---+ +----| .... |<---+--+ | VPFN3 | +-------+ | | +------+ | | | +------+ | +------+ | +-------+ | VPFN2 | +-+--->| .... |---+-+-+ | PFN2 |<------+ | .... | | | VPFN2 | +-------+ | +------+ | | +------+ +------+ | +-------+ | VPFN1 | | | +----->| FPN1 | +----| VPFN1 | +-------+ | | +------+ +-------+ | VPFN0 |----+ +------->| PFN0 | | VPFN0 | +-------+ +------+ +-------+ 虚拟内存 物理内存 虚拟内存 PFN(the page frame number): 页编号
Wenn ein Prozess ein Programm ausführt, muss er die Anweisungen des Prozesses aus dem ersten Speicher lesen und dann ausführen Anweisungen: Diese Adresse wird beim Verknüpfen des Programms ermittelt (der Adressbereich der dynamischen Bibliothek wird angepasst, wenn der Kernel den Prozess lädt und initialisiert. Um die tatsächlichen Daten zu erhalten, muss die CPU die virtuelle Adresse konvertieren). in eine physische Adresse, die benötigt wird, wenn die CPU die Adresse umwandelt. Die Seitentabelle des Prozesses und die Daten in der Seitentabelle werden vom Betriebssystem verwaltet.
Hinweis: Der Linux-Kernel-Code verwendet beim Zugriff auf den Speicher tatsächliche physische Adressen, sodass keine Konvertierung von der virtuellen Adresse in die physische Adresse erfolgt, sondern nur Programme auf Anwendungsebene benötigen.
Um die Konvertierung zu erleichtern, teilt Linux sowohl den virtuellen Speicher als auch den physischen Speicher in Seiten fester Größe auf. Die allgemeine Speicherseitengröße von x86-Systemen beträgt 4 KB, und jeder Seite wird eine eindeutige Nummer zugewiesen Es ist die Seitenzahl (PFN).
Wie aus der obigen Abbildung ersichtlich ist, erfolgt die Zuordnung zwischen virtuellen Speicher- und physischen Speicherseiten über die Seitentabelle. Der virtuelle Speicher der Prozesse X und Y ist unabhängig voneinander, und die Seitentabelle ist auch unabhängig. Der physische Speicher wird von ihnen gemeinsam genutzt. Der Prozess kann nach Belieben auf seinen eigenen virtuellen Adressraum zugreifen, während die Seitentabelle und der physische Speicher vom Kernel verwaltet werden. Wenn ein Prozess auf den Speicher zugreifen muss, übersetzt die CPU die virtuelle Adresse basierend auf der Seitentabelle des Prozesses in eine physische Adresse und greift dann darauf zu.
Hinweis: Nicht jede Seite im virtuellen Adressraum ist einer entsprechenden Seitentabelle zugeordnet. Erst nachdem die virtuelle Adresse dem Prozess zugewiesen wurde, dh nachdem der Prozess eine Funktion ähnlich wie malloc aufgerufen hat Fügt das System der Seitentabelle einen Datensatz für die entsprechende virtuelle Adresse hinzu? Wenn der Prozess auf eine virtuelle Adresse zugreift, die nicht mit der Seitentabelle verknüpft ist, löst das System ein SIGSEGV-Signal aus, wodurch der Prozess beendet wird Segmentfehler treten häufig auf, wenn wir auf wilde Zeiger zugreifen. Mit anderen Worten: Obwohl jeder Prozess über einen virtuellen 4G-Adressraum (32-Bit-System) verfügt, können nur die auf das System angewendeten Adressräume verwendet werden, und beim Zugriff auf nicht zugewiesene Adressräume treten Segmentfehlerfehler auf. Linux ordnet die virtuelle Adresse 0 nirgendwo zu. Wenn wir also auf den Nullzeiger zugreifen, wird definitiv ein Segmentfehler gemeldet.
● Größerer Adressraum: und er ist kontinuierlich, was das Schreiben und Verknüpfen von Programmen einfacher macht
● Prozessisolation: Es besteht keine Beziehung zwischen den virtuellen Adressen verschiedener Prozesse, sodass der Betrieb eines Prozesses keine Auswirkungen auf andere Prozesse hat.
● Datenschutz: Jeder Teil des virtuellen Speichers verfügt über Entsprechende Lese- und Schreibattribute können die Codesegmente des Programms vor Änderungen, Datenblöcken vor der Ausführung usw. schützen, was die Sicherheit des Systems erhöht
●Speicherzuordnung: Mit virtuellem Speicher können Dateien (ausführbare Dateien oder dynamische Bibliotheken) auf der Festplatte direkt dem virtuellen Adressraum zugeordnet werden. Dadurch kann eine verzögerte Zuweisung von physischem Speicher erreicht werden, und zwar nur dann, wenn die entsprechende Datei benötigt wird Wenn der Speicher knapp ist, wird er tatsächlich von der Festplatte in den Speicher geladen. Wenn der Speicher knapp ist, kann dieser Teil des Speichers gelöscht werden, um die Effizienz der physischen Speichernutzung zu verbessern. Dies alles ist für die Anwendung transparent.
● Gemeinsam genutzter Speicher: Beispielsweise muss eine dynamische Bibliothek nur eine Kopie im Speicher speichern und sie dann dem virtuellen Adressraum eines anderen Prozesses zuordnen, sodass der Prozess das Gefühl hat, ausschließlicher Eigentümer zu sein die Datei. Die gemeinsame Nutzung des Speichers zwischen Prozessen kann auch dadurch erreicht werden, dass derselbe physische Speicher verschiedenen virtuellen Adressräumen des Prozesses zugeordnet wird
● Physische Speicherverwaltung: Der physische Adressraum wird vollständig vom Betriebssystem verwaltet, und der Prozess kann dies nicht tun direkt zugewiesen und recycelt. Auf diese Weise kann das System den Speicher besser nutzen und den Speicherbedarf zwischen Prozessen ausgleichen
● Sonstiges: Mit dem virtuellen Adressraum können Funktionen wie Swap Space und COW (Copy on Write ) kann leicht implementiert werden
Die Seitentabelle kann einfach als verknüpfte Speicherzuordnungsliste verstanden werden (natürlich die Die tatsächliche Struktur ist sehr komplex. Jede Speicherzuordnung ordnet einer bestimmten Ressource (physischer Speicher oder externer Speicherplatz) eine virtuelle Adresse zu. Jeder Prozess verfügt über eine eigene Seitentabelle, die nichts mit den Seitentabellen anderer Prozesse zu tun hat.
Jede Speicherzuordnung ist eine Beschreibung eines Abschnitts des virtuellen Speichers, einschließlich der Startposition und Länge des virtuellen Berechtigungen (z. B. ob die Daten in diesem Speicher gelesen, geschrieben und ausgeführt werden können) und zugehörige Ressourcen (z. B. physische Speicherseiten, Seiten im Auslagerungsbereich, Dateiinhalte auf der Festplatte usw.).
Wenn ein Prozess Speicher beantragt, gibt das System die Adresse des virtuellen Speichers zurück, erstellt eine Speicherzuordnung für den entsprechenden virtuellen Speicher und fügt sie in die Seitentabelle ein, aber das System weist nicht unbedingt den entsprechenden physischen Speicher zu Diesmal wird der physische Speicher zugewiesen und mit der entsprechenden Speicherzuordnung verknüpft, wenn der Prozess tatsächlich auf diesen Speicher zugreift. Dies ist die sogenannte verzögerte Zuweisung/On-Demand-Zuweisung.
Jede Speicherzuordnung verfügt über ein Tag, um den zugehörigen physischen Ressourcentyp anzugeben. Sie ist im Allgemeinen in zwei Kategorien unterteilt, nämlich anonym und dateigestützt. Innerhalb dieser beiden Kategorien gibt es beispielsweise einige kleinere. Es gibt spezifischere Shared- und Copy-on-Write-Typen unter „Anonym“ und spezifischere gerätegestützte Typen unter „Dateigesichert“. Jeder Typ stellt Folgendes dar:
Dieser Typ gibt an, dass die der Speicherzuordnung entsprechenden physischen Ressourcen in Dateien auf der Festplatte gespeichert sind Enthalten sind der Dateispeicherort, der Offset, die RWX-Berechtigungen usw.
Wenn der Prozess zum ersten Mal auf die entsprechende virtuelle Seite zugreift, meldet die CPU einen Seitenfehler-Interrupt, da der entsprechende physische Speicher nicht in der Speicherzuordnung gefunden werden kann, und dann verarbeitet das Betriebssystem den Interrupt und speichern Sie die Datei. Der Inhalt wird in den physischen Speicher geladen und anschließend wird die Speicherzuordnung aktualisiert, sodass die CPU beim nächsten Mal auf diese virtuelle Adresse zugreifen kann. Auf diese Weise in den Speicher geladene Daten werden im Allgemeinen im Seitencache abgelegt.
Allgemeine ausführbare Programmdateien und dynamische Bibliotheken werden auf diese Weise Prozessen des virtuellen Adressraums zugeordnet.
ähnelt der Dateisicherung, außer dass das Backend der physischen Adresse der Festplatte zugeordnet wird, beispielsweise wenn der physische Speicher ausgelagert wird , wird es als vom Gerät unterstützt markiert.
Das vom Programm selbst verwendete Datensegment und der Stapelspeicher sowie der über mmap zugewiesene gemeinsam genutzte Speicher können die entsprechenden Dateien auf der Festplatte nicht finden. Daher wird dieser Teil der Speicherseite als anonyme Seite bezeichnet. Der größte Unterschied zwischen anonymer Seite und dateigesicherter Seite besteht darin, dass das System bei knappem Speicher den physischen Speicher, der der dateigesicherten Seite entspricht, direkt löscht, da er beim nächsten Mal von der Festplatte in den Speicher geladen werden kann, die anonyme Seite jedoch nicht können nicht gelöscht und nur ausgetauscht werden.
Mehrere Speicherzuordnungen in der Seitentabelle verschiedener Prozesse können über virtuelle Adressen derselben physischen Adresse zugeordnet werden (virtuelle Adressen in verschiedenen Prozessen sind möglicherweise nicht identisch). gleich) Das Gleiche) kann auf den gleichen Inhalt zugreifen. Wenn der Speicherinhalt in einem Prozess geändert wird, kann er sofort in einem anderen Prozess gelesen werden. Diese Methode wird im Allgemeinen verwendet, um gemeinsame Daten mit hoher Geschwindigkeit zwischen Prozessen (z. B. mmap) zu erreichen. Wenn die als freigegeben markierte Speicherzuordnung gelöscht und recycelt wird, muss der Referenzzähler auf der physischen Seite aktualisiert werden, damit die physische Seite recycelt werden kann, nachdem der Zähler 0 erreicht hat.
Kopieren beim Schreiben basiert auf gemeinsam genutzter Technologie. Beim Lesen dieser Art von Speicher muss das System keine besonderen Vorgänge ausführen, sondern wann Schreiben Wenn dieser Speicher verwendet wird, generiert das System einen neuen Speicher, kopiert die Daten im ursprünglichen Speicher in den neuen Speicher, ordnet dann den neuen Speicher der entsprechenden Speicherzuordnung zu und führt dann den Schreibvorgang aus. Viele Funktionen unter Linux basieren auf der Copy-on-Write-Technologie, um die Leistung zu verbessern, z. B. Fork usw.
Durch die obige Einführung können wir den Speichernutzungsprozess einfach wie folgt zusammenfassen:
1 Der Prozess sendet eine Speicheranwendungsanforderung an das System
2 Das System prüft virtuelle Adresse des Prozesses Ob der Platz aufgebraucht ist, falls noch Platz vorhanden ist, dem Prozess eine virtuelle Adresse zuweisen
3. Das System erstellt die entsprechende Speicherzuordnung (ggf. mehrere) für diese virtuelle Adresse und legt sie ab es in die Seitentabelle des Prozesses
4. Das System gibt die virtuelle Adresse an den Prozess zurück und der Prozess beginnt, auf die virtuelle Adresse zuzugreifen
5. Die CPU findet die entsprechende Speicherzuordnung in der Seitentabelle des Prozesses basierend auf der virtuellen Adresse, aber der Zuordnung Es ist nicht mit dem physischen Speicher verknüpft, daher tritt ein Seitenfehler-Interrupt auf
6 Nachdem das Betriebssystem den Seitenfehler-Interrupt empfangen hat, weist es zu echten physischen Speicher und ordnet ihn der entsprechenden Speicherzuordnung zu
7 Nachdem die Interrupt-Verarbeitung abgeschlossen ist, kann die CPU auf den Speicher zugreifen
Natürlich kommt es nicht jedes Mal zu Seiten-fehlenden Interrupts. Sie werden nur dann verwendet, wenn das System es für notwendig hält, die Speicherzuweisung zu verzögern, d. h. häufig im obigen Schritt 3. Das System weist echten physischen Speicher zu und verknüpft ihn mit der Speicherzuordnung.
Solange das Betriebssystem die Zuordnungsbeziehung zwischen virtuellem Speicher und physischem Speicher erkennt, kann es normal funktionieren. Um den Speicherzugriff jedoch effizienter zu gestalten, müssen viele Dinge berücksichtigt werden. Hier können wir uns einige andere Konzepte im Zusammenhang mit dem Speicher und ihren Funktionen ansehen.
MMU ist ein Modul der CPU, das verwendet wird, um die virtuelle Adresse eines Prozesses in eine umzuwandeln Physikalische Adresse Einfach ausgedrückt ist die Eingabe dieses Moduls die Seitentabelle und die virtuelle Adresse des Prozesses und die Ausgabe ist die physische Adresse. Die Geschwindigkeit der Umwandlung virtueller Adressen in physische Adressen wirkt sich direkt auf die Geschwindigkeit des Systems aus, daher enthält die CPU dieses Modul zur Beschleunigung.
Wie oben eingeführt, ist die Eingabe von MMU die Seitentabelle, und die Seitentabelle wird darin gespeichert Im Vergleich zum Cache der CPU ist die Geschwindigkeit des Speichers sehr langsam. Um die Konvertierungsgeschwindigkeit von virtuellen Adressen in physische Adressen weiter zu beschleunigen, hat Linux den TLB erfunden, der im L1-Cache der CPU vorhanden ist Wird verwendet, um die gefundenen virtuellen Adressen den physischen Adressen zuzuordnen. Überprüfen Sie daher den TLB vor der nächsten Konvertierung. Wenn er bereits darin enthalten ist, ist es nicht erforderlich, die MMU aufzurufen.
Da der physische Speicher in tatsächlichen Situationen viel kleiner ist als der virtuelle Speicher, muss das Betriebssystem den physischen Speicher sehr sorgfältig zuweisen, um die Speichernutzung zu maximieren. Eine Möglichkeit, physischen Speicher zu sparen, besteht darin, nur die Daten in den Speicher zu laden, die der aktuell verwendeten virtuellen Seite entsprechen. Wenn Sie beispielsweise in einem großen Datenbankprogramm nur Abfragevorgänge verwenden, ist es nicht erforderlich, die für das Einfügen, Löschen usw. verantwortlichen Codesegmente in den Speicher zu laden. Dadurch kann viel physischer Speicher eingespart werden Die sogenannte physische Speicherseitenzuweisung kann auch als verzögertes Laden bezeichnet werden.
Das Implementierungsprinzip ist sehr einfach. Wenn die CPU auf eine virtuelle Speicherseite zugreift und die der virtuellen Speicherseite entsprechenden Daten nicht in den physischen Speicher geladen wurden, benachrichtigt die CPU das Betriebssystem dass ein Seitenfehler aufgetreten ist und dann das Betriebssystem für das Laden der Daten in den physischen Speicher verantwortlich ist. Da das Laden von Daten in den Speicher zeitaufwändig ist, wartet die CPU nicht dort, sondern plant andere Prozesse. Wenn sie den Prozess das nächste Mal plant, befinden sich die Daten bereits im physischen Speicher.
Linux verwendet diese Methode hauptsächlich zum Laden ausführbarer Dateien und dynamischer Bibliotheken. Wenn die Ausführung des Programms durch den Kernel geplant wird, ordnet der Kernel die ausführbaren Dateien und dynamischen Bibliotheken des Prozesses dem virtuellen Adressraum zu Der Prozess läuft ab und lädt nur den kleinen Teil der Daten, der sofort verwendet wird, in den physischen Speicher, und die anderen Teile werden nur geladen, wenn die CPU darauf zugreift.
Wenn ein Prozess Daten in den physischen Speicher laden muss, der tatsächliche physische Speicher jedoch aufgebraucht ist, wird das Betriebssystem Einige Seiten im physischen Speicher müssen zurückgefordert werden, um den Anforderungen des aktuellen Prozesses gerecht zu werden.
Bei dateigestützten Speicherdaten, das heißt, die Daten im physischen Speicher stammen von Dateien auf der Festplatte, entfernt der Kernel diesen Teil der Daten direkt aus dem Speicher, um beim nächsten Mal mehr Speicher freizugeben Wenn ein Prozess auf diesen Teil der Daten zugreifen muss, wird er von der Festplatte in den Speicher geladen. Wenn dieser Teil der Daten jedoch geändert und nicht in die Datei geschrieben wurde, wird dieser Teil der Daten zu schmutzigen Daten. Die schmutzigen Daten können nicht direkt gelöscht, sondern nur in den Auslagerungsbereich verschoben werden. (Ausführbare Dateien und dynamische Bibliotheksdateien werden nicht geändert, aber Festplattendateien, die über mmap+private dem Speicher zugeordnet sind, können geändert werden. Der auf diese Weise zugeordnete Speicher ist etwas Besonderes. Vor der Änderung wird er dateigesichert. Nach der Änderung wird dies nicht der Fall sein geändert. Es wird anonym, bevor es zurück auf die Festplatte geschrieben wird)
对于anonymous的内存数据,在磁盘上没有对应的文件,这部分数据不能直接被删除,而是被系统移到交换空间上去。交换空间就是磁盘上预留的一块特殊空间,被系统用来临时存放内存中不常被访问的数据,当下次有进程需要访问交换空间上的数据时,系统再将数据加载到内存中。由于交换空间在磁盘上,所以访问速度要比内存慢很多,频繁的读写交换空间会带来性能问题。
关于swap空间的详细介绍请参考Linux交换空间
有了虚拟内存之后,进程间共享内存变得特别的方便。进程所有的内存访问都通过虚拟地址来实现,而每个进程都有自己的page tables。当两个进程共享一块物理内存时,只要将物理内存的页号映射到两个进程的page table中就可以了,这样两个进程就可以通过不同的虚拟地址来访问同一块物理内存。
从上面的那个图中可以看出,进程X和进程Y共享了物理内存页PFN3,在进程X中,PFN3被映射到了VPFN3,而在进程Y中,PFN3被映射到了VPFN1,但两个进程通过不同的虚拟地址访问到的物理内存是同一块。
page table里面的每条虚拟内存到物理内存的映射记录(memory mapping)都包含一份控制信息,当进程要访问一块虚拟内存时,系统可以根据这份控制信息来检查当前的操作是否是合法的。
为什么需要做这个检查呢?比如有些内存里面放的是程序的可执行代码,那么就不应该去修改它;有些内存里面存放的是程序运行时用到的数据,那么这部分内存只能被读写,不应该被执行;有些内存里面存放的是内核的代码,那么在用户态就不应该去执行它;有了这些检查之后会大大增强系统的安全性。
由于CPU的cache有限,所以TLB里面缓存的数据也有限,而采用了huge page后,由于每页的内存变大(比如由原来的4K变成了4M),虽然TLB里面的纪录数没变,但这些纪录所能覆盖的地址空间变大,相当于同样大小的TLB里面能缓存的映射范围变大,从而减少了调用MMU的次数,加快了虚拟地址到物理地址的转换速度。
为了提高系统性能,Linux使用了一些跟内存管理相关的cache,并且尽量将空闲的内存用于这些cache。这些cache都是系统全局共享的:
Buffer Cache
用来缓冲块设备上的数据,比如磁盘,当读写块设备时,系统会将相应的数据存放到这个cache中,等下次再访问时,可以直接从cache中拿数据,从而提高系统效率。它里面的数据结构是一个块设备ID和block编号到具体数据的映射,只要根据块设备ID和块的编号,就能找到相应的数据。
Page Cache
这个cache主要用来加快读写磁盘上文件的速度。它里面的数据结构是文件ID和offset到文件内容的映射,根据文件ID和offset就能找到相应的数据(这里文件ID可能是inode或者path,本人没有仔细去研究)。
从上面的定义可以看出,page cache和buffer cache有重叠的地方,不过实际情况是buffer cache只缓存page cache不缓存的那部分内容,比如磁盘上文件的元数据。所以一般情况下和page cache相比,Buffer Cache的大小基本可以忽略不计。
当然,使用cache也有一些不好的地方,比如需要时间和空间去维护cache,cache一旦出错,整个系统就挂了。
有了上面介绍的知识,再来看看我们刚开始提出来的问题,以top命令的输出为例:
KiB Mem : 500192 total, 349264 free, 36328 used, 114600 buff/cache KiB Swap: 524284 total, 524284 free, 0 used. 433732 avail Mem
KiB Mem代表物理内存,KiB Swap代表交换空间,它们的单位都是KiB。
total、used和free没什么好介绍的,就是总共多少,然后用了多少,还剩多少。
buff/cached代表了buff和cache总共用了多少,buff代表buffer cache占了多少空间,由于它主要用来缓存磁盘上文件的元数据,所以一般都比较小,跟cache比可以忽略不计;cache代表page cache和其它一些占用空间比较小且大小比较固定的cache的总和,基本上cache就约等于page cache,page cache的准确值可以通过查看/proc/meminf中的Cached得到。由于page cache是用来缓存磁盘上文件内容的,所以占有空间很大,Linux一般会尽可能多的将空闲物理内存用于page cache。
avail Mem gibt die Menge an physischem Speicher an, die für die nächste Zuweisung des Prozesses verwendet werden kann. Diese Größe ist im Allgemeinen etwas größer als frei, da das System zusätzlich zum freien Speicherplatz auch sofort etwas Speicherplatz freigeben kann.
Wie kann man also feststellen, ob die aktuelle Speichernutzung abnormal ist? Hier sind die folgenden Punkte als Referenz:
● Der Wert von Mem Free ist relativ gering, und der Wert von Buff/Cache ist ebenfalls gering.
Der relativ geringe Wert von Free bedeutet nicht unbedingt, dass dies der Fall ist Ein Problem, da Linux versucht, so viel wie möglich zu tun. Speicher wird für den Seiten-Cache verwendet. Wenn der Wert von buff/cache jedoch auch klein ist, bedeutet dies, dass der Speicher knapp ist und das System nicht über genügend Speicher für den Cache verfügt. Wenn es sich bei der aktuellen Serverbereitstellung um eine Anwendung handelt, die häufiges Lesen und Schreiben von Datenträgern erfordert, z. B. einen FTP-Server, sind die Auswirkungen auf die Leistung sehr groß.
● Der verwendete Swap-Wert ist relativ groß.
Diese Situation ist schwerwiegender als die oben genannte. Unter normalen Umständen sollte Swap selten verwendet werden mehr. Wenn Sie häufiges Ein-/Auslagern über den Befehl vmstat sehen, bedeutet dies, dass der Systemspeicher ernsthaft unzureichend ist und die Gesamtleistung ernsthaft beeinträchtigt wurde.
Empfohlene verwandte Video-Tutorials: „Linux-Tutorial "
Das Obige ist der gesamte Inhalt dieses Artikels. Ich hoffe, er wird für das Studium aller hilfreich sein. Weitere spannende Inhalte finden Sie in den entsprechenden Tutorial-Kolumnen auf der chinesischen PHP-Website! ! !
Das obige ist der detaillierte Inhalt vonEinführung in die Linux-Speicherverwaltung. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!