Wie man die Reaktionsfähigkeit, den Speicher und das Paging von Linux zähmt

27

Erste Frage zum Überlauf =) ... +100 Kopfgeld. Konnte nicht an etwas denken, was mir bis jetzt wirklich wichtig war:

Ich habe es wirklich satt, wie schnell der Linux-Desktop reagiert, z. B. http://brainstorm.ubuntu.com/item/85/ - in Situationen mit wenig freiem Arbeitsspeicher oder Situationen mit hohem Datenträgerdurchsatz wird das System langsamer ein Kriechen ; Dies ist absolut schrecklich für Anwendungen, die eine anständige Leistung erfordern. Darüber hinaus reagiert die Benutzeroberfläche nicht mehr. Vergleichen Sie dies zum Beispiel mit OS X. Wenn eine Anwendung Ressourcen überlastet, können Sie immer mit gedrückter Wahltaste darauf klicken, um das Beenden zu erzwingen, während ich unter Linux nicht einmal die Tastenkombination Alt-Tab oder den Desktop wechseln oder sogar Strg-Alt-F1 verwenden kann, um eine zu erhalten terminal - na ja, ich kann, es dauert nur etwa 1-2 Minuten pro Operation.

Ich benutze gkrellm, um zu sehen, wie sich die Situation entwickelt. In der Regel ist die Speicherauslastung sehr hoch oder der Datenträgerdurchsatz springt dramatisch.

Es ist keine schlechte Hardware, mit einem 2,6-GHz-Quad-Core und 4 GB 800-MHz-DDR2-RAM (hätte 6 GB gehabt, konnte aber aufgrund einer Hardware-Inkompatibilität nicht mit alten Geräten kombiniert werden). Dieses Problem verschwindet möglicherweise, wenn ich unvermeidlich mehr RAM bekomme, aber ich glaube nicht, dass dies das Herzstück des Problems ist. Ich habe sogar zwei Swap-Partitionen auf verschiedenen Festplatten.

Ich glaube, das Problem ist dreifach:

  • Ausreißerprogramme, die enorm viel Speicherplatz beanspruchen - das Gesetz muss für diese Programme festgelegt werden, mit Einschränkungen in Bezug auf ihre Größe
    • (z. B. Tabs in Chrome mit jeweils 20 bis 50 MB, von denen einige Hunderte von MB verwenden können)
    • (z. B. andere Programme wie update-db und Indexer, die ich deaktivieren und von cron entfernen musste, weil sie das System bei jedem Start auf Crawl verlangsamten usw.)
  • Irgendetwas Schreckliches im Kernel- oder Buskonflikt passiert, sodass Situationen mit hohem Datendurchsatz das gesamte System zum Crawlen verlangsamen (möglicherweise durch Auslagern wichtiger Programme).
  • Der Kernel priorisiert die Benutzeroberfläche oder wichtige Programme nicht in Bezug auf Ressourcen wie Speicher, Paging und sogar die Prozessorauslastung

Upvotes gehen an:

Ich bin daher auf der Suche nach einer Lösung, bei der alle derartigen Programme wegfallen. Insbesondere suche ich nach einer Lösung, bei der die Prozesse proportional verlangsamt werden, während das System und andere Programme völlig unberührt bleiben und lange genug reagieren, um etwas manuell zu beenden. Außerdem sollte der Fenstermanagerprozess (und alles andere, was die Reaktionsfähigkeit der Benutzeroberfläche beeinträchtigen könnte) unter allen Umständen reagieren.

Insbesondere bin ich von /etc/security/limits.conf( man limits.conf) fasziniert , befürchte jedoch, dass dies nur die Kontrolle pro Benutzer ermöglicht, und die kommentierten Beispiele in der Datei erscheinen in Bezug auf die Beschreibung oder den Anfang eher undurchsichtig. Ich hoffe, dass ein limits.conffunktioniert, würde mich aber nicht wundern, wenn es nicht einmal funktioniert oder wenn es keine angemessene Lösung für mein Problem ist oder so granular, wie ich es erreichen möchte. Ein pro-Prozess-Name limits.confwäre ideal, vorausgesetzt, dass limits.conf funktioniert. Ich würde gerne eine limits.conf ausprobieren, die von den Leuten bereitgestellt wird, um zu testen, ob sie funktioniert, obwohl ich an dieser Stelle für alle Lösungen offen bin.

Es kann auch hilfreich sein, sich einen Überblick darüber zu verschaffen, wie OS X eine so gute Reaktionsfähigkeit der Benutzeroberfläche aufrechterhält.

Ich habe meine /tmpund Cache-Ordner bereits optimiert , um sie zu aktivieren tmpfs, und im Allgemeinen ist die Festplattenauslastung nahezu Null.

Vage verwandte Themen:

  • Überbelegung des Speichers

Antworten, von denen ich nicht denke, dass sie funktionieren werden:

  • swapoff (Dadurch können Memory-Hog-Programme immer noch mit Mord davonkommen, und das System friert permanent ein, wenn der Speicher wirklich schlecht ist. Stimmen für alle, die eine Optimierung vorschlagen können, die den OOM-Killer früher aufgerufen hat, bevor sie ausgetauscht wurden, und zielen auf bestimmte Programme ab.)
  • echo ?? > /sys/.../swappiness (kein erkennbarer Effekt)
  • nice (hat noch nie funktioniert)
  • ionice (habe keinen Unterschied bemerkt)
  • Selinux (Programminkompatibilität scheint ein Albtraum zu sein)
  • Realtime Linux, dh kann den Kernel unterbrechen
  • *
user76871
quelle
hmm, ich scheine nicht in der Lage zu sein, ein Kopfgeld zu setzen; Ich schätze, der Link wird 48 Stunden lang nicht angezeigt? ... Nun, ich werde das Kopfgeld mit all
meinem
1
+1, das ist das größte Problem, das ich täglich mit dem Linux-Desktop habe. Ich habe gelegentliche Einfrierungen, vielleicht alle paar Wochen, aber diese sind nicht oft genug, um besonders nervig zu werden. Es scheint jedoch nur ein Problem mit Anwendungen zu sein, die, wie Sie sagten, eine hohe E / A- Auslastung aufweisen: Anwendungen mit einer hohen CPU-Auslastung haben kaum keine Auswirkungen auf die allgemeine Systemleistung. Ich wusste nichts über ionice, es scheint, dass es die richtige Lösung für dieses Problem wäre, wenn es richtig funktionieren würde.
crazy2be
1
3 Jahre später und dies ist immer noch ein Problem unter Linux. @ crazy2be oder user76871, ich nehme nicht an, dass du in der Zwischenzeit eine Lösung gefunden hast?
Glutanimate
@Glutanimate: Ja, 32 GB physischer Arbeitsspeicher und nicht weniger (naja, vielleicht 16 GB ... aber das treibt es an), außerdem kann es sein, dass der Video-Arbeitsspeicher groß ist. Dies behebt nicht die Nichtreaktivität aufgrund von hoher CPU oder Interrupts oder so weiter, verhindert jedoch die Nichtreaktivität in Situationen mit wenig Arbeitsspeicher.
user76871

Antworten:

6

Klingt so, als würde Ihr System stark tauschen. Das Verwenden von vmstat 1kann einige Details enthüllen - lassen Sie es einfach in einem Terminalfenster laufen und wechseln Sie zu diesem, wenn die Verlangsamung einsetzt.

Anstatt / tmp und "cache" in tmpfs zu setzen, würde ich ein normales Disk-Dateisystem verwenden, das mit dieser noatimeOption gemountet ist . Häufig verwendete Daten bleiben ohnehin im Cache, und ältere Daten können auf die Festplatte geschrieben werden, um RAM für Anwendungen freizugeben. Wenn / tmp und / oder der Cache größer werden, kann dies sehr hilfreich sein.

Turbo J
quelle
1
+1 für die Erwähnung noatime.
LawrenceC
Vielen Dank für Ihre Erwähnung noatime, leider habe ich diese Mount-Option verwendet, und ich glaube nicht, dass sie viel dazu beigetragen hat, die Reaktionsfähigkeit sicherzustellen (obwohl sie einer Tonne dabei hilft, sicherzustellen, dass die Festplatte nicht überlastet ist). Nur um sicherzugehen, dass ich noatime in meinem aktuellen Setup wieder aktiviert habe. Nicht-tmpfs mit noatime zu haben, scheint allerdings etwas seltsam, da ich mir immer noch vorstellen würde, dass massive Schreibvorgänge stattfinden müssen.
user76871
+1, ausprobiert vmstat 1- äußerst nützlich bei der Clinch-Diagnose, dass Tausch in der Tat ein großer Teil des Problems Hauptproblem ist
user76871
2
Autsch. Ich habe noch nie ein Linux-System gesehen, bei dem so viel getauscht werden musste. Haben Sie überprüft, df -mwie viel Speicher in tmpfs-Dateisystemen belegt ist? Etwas ist zu essen Ihr RAM relativ schnell.
Turbo J
Danke für den Vorschlag und lehre mich über die -mOption. df -h -mScheint leider darauf hinzudeuten, dass nur 100 MB meines Speichers vorhanden sind tmpfs, daher bezweifle ich, dass dies mit der Verwendung von Speicher für tmpfs und Caches zusammenhängt. Dies scheint auch nicht ungewöhnlich zu sein; Ich habe es schon bei mehreren Distributionen erlebt, als deren RAM fast an die Grenze getrieben wurde.
user76871
5

Ich bin kein Kernel-Entwickler, aber ich habe jahrelang über dieses Thema philosophiert, weil ich soooo oft darauf gestoßen bin. Ich habe mir tatsächlich eine Metapher für die ganze Situation ausgedacht, also lassen Sie mich Ihnen das sagen. Ich gehe in meiner Geschichte davon aus, dass Dinge wie "Swap" nicht existieren. Mit 32 GB RAM macht Swap heutzutage ohnehin wenig Sinn.

Stellen Sie sich ein Viertel von Ihnen vor, in dem Wasser durch Rohre an jedes Gebäude angeschlossen wird und die Städte die Kapazität verwalten müssen. Nehmen wir an, Sie haben nur eine Produktion von 100 Einheiten Wasser pro Sekunde (und die gesamte ungenutzte Kapazität geht verloren, weil Sie keine Reservoirtanks haben). Jedes Zuhause (Zuhause = eine kleine App, ein Terminal, das Uhr-Widget usw.) benötigt eine Wassereinheit pro Sekunde. Das ist alles schön und gut, weil deine Bevölkerung 90 ist, damit jeder genug Wasser bekommt.

Nun entscheidet der Bürgermeister (= Sie), dass Sie ein großes Restaurant (= Browser) eröffnen wollen. Dieses Restaurant beherbergt mehrere Köche (= Browser-Tabs). Jeder Koch benötigt 1 Einheit Wasser pro Sekunde. Sie beginnen mit 10 Köchen, der Gesamtwasserverbrauch für die gesamte Nachbarschaft beträgt also 100 Einheiten Wasser, was immer noch alles in Ordnung ist.

Jetzt beginnt das lustige Zeug: Sie stellen einen anderen Koch in Ihr Restaurant ein, der den gesamten Wasserbedarf 101 ergibt, den Sie offensichtlich nicht haben. Du musst etwas tun.

Das Wassermanagement (= Kernel) hat 3 Möglichkeiten.

1. Die erste Möglichkeit besteht darin, den Dienst für die Häuser zu unterbrechen, die das Wasser in letzter Zeit nicht benutzt haben. Dies ist in Ordnung, aber wenn das getrennte Haus das Wasser wieder benutzen möchte, muss es den langwierigen Registrierungsprozess erneut durchlaufen. Das Management kann mehrere Häuser trennen, um mehr Wasserressourcen freizusetzen. Tatsächlich trennen sie alle Häuser, die in letzter Zeit kein Wasser verbraucht haben, und halten so immer eine gewisse Menge an freiem Wasser bereit.

Obwohl Ihre Stadt weiterhin funktioniert, ist der Nachteil, dass der Fortschritt zum Stillstand kommt. Die meiste Zeit verbringen Sie damit, auf das Wassermanagement zu warten, um Ihren Dienst wieder aufzunehmen.

Dies macht der Kernel mit den dateibasierten Seiten. Wenn Sie eine große ausführbare Datei (wie Chrome) ausführen, wird deren Datei in den Speicher kopiert. Wenn der Arbeitsspeicher knapp ist oder Teile vorhanden sind, auf die in letzter Zeit nicht zugegriffen wurde, kann der Kernel diese Teile löschen, da sie sowieso von der Festplatte geladen werden können. Wenn dies übermäßig getan wird, kommt Ihr Desktop zum Stillstand, da alles nur auf die Eingabe von Daten auf der Festplatte wartet. Beachten Sie, dass der Kernel auch viele der zuletzt verwendeten Seiten löscht, wenn Sie viel E / A ausführen. Aus diesem Grund dauert es eine Weile, bis Sie zu einer Hintergrund-App wechseln, nachdem Sie mehrere große Dateien wie DVD-Images kopiert haben.

Dies ist das nervigste Verhalten für mich, weil ich Hickups hasse und Sie keine Kontrolle darüber haben. Es wäre schön, es ausschalten zu können. Ich denke an etwas in der Art von

sed -i 's/may_unmap = 1/may_unmap = (vm_swappiness >= 0)/' mm/vmscan.c

und dann könnten Sie vm_swappiness auf -1 setzen, um dies zu deaktivieren. Das hat in meinen kleinen Tests ganz gut geklappt, aber leider bin ich kein Kernel-Entwickler, also habe ich es niemandem geschickt (und offensichtlich ist die kleine Modifikation oben nicht vollständig).

2.Die Direktion könnte die Bitte des neuen Kochs um Wasser ablehnen. Das klingt zunächst nach einer guten Idee. Es gibt jedoch zwei Nachteile. Erstens gibt es Unternehmen, die viele Wasserabonnements beantragen, obwohl sie diese nicht nutzen. Ein möglicher Grund dafür besteht darin, den gesamten Aufwand zu vermeiden, mit der Wasserwirtschaft zu sprechen, wenn sie zusätzliches Wasser benötigt. Ihr Wasserverbrauch steigt und sinkt je nach Tageszeit. Im Fall des Restaurants benötigt das Unternehmen zum Beispiel mittags viel mehr Wasser als um Mitternacht. Sie fordern also alles mögliche Wasser an, das sie verwenden könnten, aber das verschwendet die Wasserzuteilung während Mitternacht. Das Problem ist, dass nicht alle Unternehmen ihre Spitzenauslastung richtig vorhersehen können und daher viel mehr verlangen, in der Hoffnung, dass sie sich nie mehr darum kümmern müssen.

Dies ist, was Java Virtual Machine tut: Es reserviert eine Menge Speicher beim Start und funktioniert dann von diesem. Standardmäßig reserviert der Kernel den Speicher nur, wenn Ihre Java-App ihn tatsächlich verwendet. Wenn Sie Overcommit deaktivieren, nimmt der Kernel die Reservierung jedoch ernst. Die Zuweisung ist nur dann erfolgreich, wenn tatsächlich die Ressourcen dafür vorhanden sind.

Bei diesem Ansatz gibt es jedoch ein anderes, schwerwiegenderes Problem. Angenommen, ein Unternehmen fordert jeden Tag eine einzelne Wassereinheit an (statt in Schritten von 10). Schließlich erreichen Sie einen Zustand, in dem Sie 0 freie Einheiten haben. Jetzt wird diese Firma nicht mehr in der Lage sein, mehr zuzuteilen. Das ist in Ordnung, wer kümmert sich schon um die großen Unternehmen? Das Problem ist jedoch, dass die kleinen Häuser auch kein Wasser mehr anfordern können! Sie werden nicht in der Lage sein, kleine öffentliche Bäder zu bauen, um den plötzlichen Zustrom von Touristen zu bewältigen. Sie können im nahe gelegenen Wald kein Notwasser für das Feuer bereitstellen.

In Bezug auf den Computer: In Situationen mit sehr wenig Arbeitsspeicher können Sie ohne Überbeanspruchung kein neues xterm öffnen, Sie können nicht in Ihren Computer sshen, Sie können kein neues Register öffnen, nach dem gesucht werden kann behebt. Mit anderen Worten: Durch Deaktivieren von Overcommit wird Ihr Desktop auch dann unbrauchbar, wenn der Arbeitsspeicher knapp wird.

3. Hier ist eine interessante Möglichkeit, das Problem zu lösen, wenn ein Unternehmen anfängt, zu viel Wasser zu verwenden. Das Wassermanagement sprengt es! Wörtlich: Es geht zum Restaurant, wirft Dynamit hinein und wartet, bis es explodiert. Dadurch wird der Wasserbedarf der Stadt sofort um ein Vielfaches gesenkt, sodass neue Menschen einziehen, öffentliche Badezimmer usw. geschaffen werden können. Als Bürgermeister können Sie das Restaurant in der Hoffnung wiederaufbauen, dass diesmal weniger Wasser benötigt wird. Zum Beispiel werden Sie die Leute anweisen, nicht in die Restaurants zu gehen, wenn sich bereits zu viele Personen darin befinden (z. B. werden weniger Browser-Registerkarten geöffnet).

Dies ist eigentlich das, was der Kernel macht, wenn ihm alle Optionen ausgehen und er Speicher benötigt: Er ruft den OOM-Killer auf. Es wählt eine große Anwendung aus (basierend auf vielen Heuristiken) und beendet sie, wodurch Speicherplatz frei wird, aber ein ansprechender Desktop beibehalten wird. Tatsächlich macht der Android-Kernel dies sogar noch aggressiver: Er beendet die am wenigsten genutzte App, wenn der Speicher knapp wird (im Vergleich zum Standard-Kernel, der dies nur als letzten Ausweg tut). Dies wird in Android als Viking Killer bezeichnet.

Ich denke, dies ist eine der einfachsten Lösungen für das Problem: Es ist nicht so, als hätten Sie mehr Optionen als dies. Warum sollten Sie nicht früher als später darüber hinwegkommen, oder? Das Problem ist, dass der Kernel manchmal ziemlich viel Arbeit leistet, um den OOM-Killer nicht aufzurufen. Das ist der Grund, warum Sie feststellen, dass Ihr Desktop sehr langsam ist und der Kernel nichts dagegen unternimmt. Aber zum Glück gibt es eine Option, den OOM-Killer selbst aufzurufen! Stellen Sie zunächst sicher, dass der Magic Sysrq-Schlüssel aktiviert ist (z. B. echo 1 | sudo tee /proc/sys/kernel/sysrq), und drücken Sie einfach Alt + SysRQ, Alt + F, wenn Sie das Gefühl haben, dass der Kernel fast voll ist.

OK, das ist alles schön, aber Sie möchten es ausprobieren? Die Situation mit wenig Speicher ist sehr einfach zu reproduzieren. Ich habe eine sehr einfache App dafür. Sie müssen es zweimal ausführen. Der erste Durchlauf bestimmt, wie viel freier Arbeitsspeicher Sie haben, der zweite Durchlauf schafft die Situation mit wenig Arbeitsspeicher. Beachten Sie, dass diese Methode davon ausgeht, dass Sie Swap deaktiviert haben (z sudo swapoff -a. B. do a ). Code und Verwendung folgen:

// gcc -std=c99 -Wall -Wextra -Werror -g -o eatmem eatmem.c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>

int main(int argc, char** argv)
{
    int limit = 123456789;
    if (argc >= 2) {
        limit = atoi(argv[1]);
    }
    setbuf(stdout, NULL);
    for (int i = 1; i <= limit; i++) {
        memset(malloc(1 << 20), 1, 1 << 20);
        printf("\rAllocated %5d MiB.", i);
    }
    sleep(10000);
    return 0;
}

Und so verwenden Sie es:

$ gcc -std=c99 -Wall -Wextra -Werror -g -o eatmem eatmem.c
$ ./eatmem
Allocated 31118 MiB.Killed
$ ./eatmem 31110
Allocated 31110 MiB.Killed

Beim ersten Aufruf wurde festgestellt, dass 31.118 MB freier Arbeitsspeicher vorhanden sind. Also sagte ich der Anwendung, sie solle 31.110 MiB RAM zuweisen, damit der Kernel ihn nicht abbricht, sondern fast meinen gesamten Speicher aufzehrt. Mein System fror ein: Auch der Mauszeiger rührte sich nicht. Ich habe Alt + SysRQ, Alt + F gedrückt und es hat meinen EATMEM-Prozess beendet und das System wurde wiederhergestellt.

Auch wenn wir unsere Optionen behandelt haben, die in einer Situation mit wenig Arbeitsspeicher funktionieren, besteht der beste Ansatz (wie bei jeder anderen gefährlichen Situation) darin, dies überhaupt zu vermeiden. Dafür gibt es viele Möglichkeiten. Ein üblicher Weg, den ich gesehen habe, besteht darin, die fehlerhaften Anwendungen (wie Browser) in andere Container als den Rest des Systems zu verschieben. In diesem Fall kann der Browser keine Auswirkungen auf Ihren Desktop haben. Aber die Prävention selbst liegt außerhalb des Rahmens der Frage, deshalb werde ich nicht darüber schreiben.

TL; DR: Obwohl es derzeit keine Möglichkeit gibt, Paging vollständig zu vermeiden, können Sie einen vollständigen Systemstopp abmildern, indem Sie Overcommit deaktivieren. In Situationen mit wenig Arbeitsspeicher wird Ihr System jedoch weiterhin unbrauchbar sein, allerdings auf andere Weise. Unabhängig davon drücken Sie in einer Situation mit wenig Arbeitsspeicher Alt + SysRQ, Alt + f, um einen großen Prozess nach Wahl des Kernels abzubrechen. Ihr System sollte nach einigen Sekunden seine Reaktionsfähigkeit wiederherstellen. Dies setzt voraus, dass Sie den magischen sysrq-Schlüssel aktiviert haben (dies ist nicht die Standardeinstellung).

ypsu
quelle
Ich habe dir meinen Ruf als Kopfgeld für diese Ressource verliehen, daher konnte ich nicht einmal einen Kommentar hinterlassen :) Zum Schluss habe ich mir ein paar Dankeschöns für diese großartige Antwort verdient! Ich habe mich die ganze Zeit mit diesem Problem befasst, als ich meinen Laptop mit 8 GB hatte (verrückt, aber in diesen Tagen ging meinem System regelmäßig der Speicher aus). Vor kurzem habe ich folgendes Projekt gefunden: github.com/rfjakob/earlyoom. Dies könnte dazu beitragen, dass das System nicht mehr reagiert, indem einige Prozesse abgebrochen werden , bevor es zu spät ist.
Vlad Frolov
4

Wenn Sie alle temporären Dateien und Cache-Dateien auf a setzen, tmpfswird der verfügbare Arbeitsspeicher verringert, sodass das System möglicherweise früher als nötig ausgetauscht wird.

Es hört sich so an, als hätten Sie einige Anwendungen, die sich auf eine Art Kernel-Einrichtung oder einen Treiber verlassen, der überlastet wird. Sie gehen nicht zu detailliert darauf ein, welche Arten von Anwendungen außer den von Ihnen verwendeten Browsern und Indexern verwendet werden und ob Sie die Indexer deaktiviert haben.

Sie können versuchen, zu einer Desktop-Umgebung oder einem Fenstermanager zu wechseln, der weniger Ressourcen verbraucht, z. B. LXDE oder IceWM. Bei der Arbeit benutze ich ein Linux-System mit installiertem LXDE und ROX-Filer für eine sehr minimale Desktop-Umgebung. Der Zweck dieses Linux-Systems besteht darin, VMWare Player auszuführen, sodass Windows XP und Windows 7 gleichzeitig ausgeführt werden können. Es ist eine ähnliche Hardware-Spezifikation wie Sie und ich habe nicht allzu viele Probleme mit der Reaktionsfähigkeit unter dieser hohen Last, durch die ich die Hardware stecke. Ich habe keine Probleme mit der Reaktionsfähigkeit von Linux selbst (es sind normalerweise die VMs, die mich manchmal eine Sekunde warten lassen, und es wird erwartet, dass ich 1 Platte zwischen 2 VMs und 1 Betriebssystem teile) und war immer in der Lage, die VMs anzuhalten oder herunterzufahren, wann immer dies möglich war Ich möchte.

Für mich weist dies auf ein Problem mit bestimmten Anwendungen hin, die Sie ausführen.

Ist DMA für Ihre Festplatten aktiviert? (Verwendung hdparm) Wenn Sie die Festplattenverschlüsselung verwenden, muss der gesamte Festplattenverkehr durch die CPU geleitet werden, was den Vorteil von DMA zum großen Teil zunichte macht. Dies hätte zur Folge, dass der hohe Datenverkehr auf der Festplatte zu einem CPU-Anstieg führt, der das gesamte System verlangsamt. (BEARBEITEN: um zu verdeutlichen, dass die Deaktivierung von DMA ODER die Verwendung von DMA zu dm-crypteiner hohen CPU-Auslastung bei hohem Festplattenverkehr führt.)

LawrenceC
quelle
2
Der Punkt der Frage ist nicht, dass das WM aufgebläht ist und das System langsam wird (es reagiert wahrscheinlich bei normaler Verwendung perfekt), sondern dass der Kernel Anwendungen nicht richtig priorisiert, wenn ihm der Speicher ausgeht und er darauf zugreifen muss starkes tauschen. Ich hatte dieses Problem auf jedem Desktop-Linux, das ich jemals verwendet habe, und obwohl die Verwendung von leichteren Programmen oder das Hinzufügen von mehr RAM hilfreich sein könnte, wird die Wurzel des Problems nicht behoben.
crazy2be
In meinem vorherigen Beitrag habe ich Folgendes gesagt: "Es hört sich so an, als hätten Sie einige Anwendungen, die sich auf eine Art Kernel-Einrichtung oder einen Treiber verlassen, der überlastet wird." Vielleicht liegt der Engpass in einem bestimmten Kernelmodul. Ich bin kein Kernel-Experte, aber ich bin sicher, dass die Speicherzuweisung von der Kernel-Seite, insbesondere von der Modul-Seite, anders funktioniert als von der Userland-Seite. Die CPU-Auslastung auf der Kernelseite wird wahrscheinlich auch anders gehandhabt (ich weiß nicht, ob Sie "nette" Kernelprozesse ausführen können). Ich kann nicht weiter kommentieren, ohne die spezifischen betroffenen Anwendungen zu kennen.
LawrenceC
Auch wenn Sie FUSE NTFS verwenden, kann dies zu Langsamkeit führen.
LawrenceC
1
Mir ist bewusst, dass ein RAM-basiertes Dateisystem wie tmpfs (offensichtlich) dazu führt, dass RAM schneller ausgeht und dass ein leichtes WM die Symptome des zugrunde liegenden Problems geringfügig reduzieren kann. Ich fühlte mich unter Druck gesetzt, tmpfs zu verwenden, was durch die schlechte Reaktionsfähigkeit beim Schreiben auf die Festplatte verursacht werden kann. Trotzdem vielen Dank für Ihren Vorschlag, insbesondere den Teil über DMA, den ich der Liste der möglicherweise verwandten Themen hinzugefügt habe. Ich bin der Meinung, dass DMA aktiviert ist und ich kein kryptografisches Dateisystem verwende.
user76871
1

Dies ist ein häufiges Problem mit dem Scheduler von Linux. Das System wird langsamer, wenn E / A-Aktivitäten auftreten. Es gibt nicht wirklich viele Dinge, die du tun könntest, um die Situation zu verbessern, wenn du nicht auf Kernel-Hacking stehst :)

Vielleicht können diese helfen:

http://www.phoronix.com/scan.php?page=article&item=linux_2637_video&num=1

http://www.osnews.com/story/24223/Alternative_to_the_200_Lines_Kernel_Patch_that_Does_Wonders_

Lamnk
quelle
1
Wie ich mich erinnere, sind diese Kernel-Patches nur dann wirklich relevant, wenn Sie ein Programm kompilieren oder etwas anderes tun, das in einem Terminal sehr CPU- (und E / A-lastig ist?) , Während Sie versuchen, mit GUI-Anwendungen zu interagieren. Es hilft nicht in der allgemeineren Situation, in der eine GUI-Anwendung schwere Arbeit leistet und Sie leider versuchen, mit einer anderen GUI-Anwendung zu arbeiten.
crazy2be
0

Auch wenn die Frage über zwei Jahre alt ist und die Antwort von @ ypsu großartig ist, ist die Situation mit Linux-basierten Systemen aufgrund des fehlenden Arbeitsspeichers immer noch schlecht.

Hier ist meine Beobachtung zum Problem: Auch wenn ich überhaupt keinen Swap habe, leuchtet meine Festplattenanzeige, sobald das System über wenig Speicher verfügt, da die Festplatte zu 100% ausgelastet ist. Angesichts dieser Tatsache scheint die Hauptursache darin zu liegen, dass der Kernel versucht, Speicher freizugeben, indem er etwas entlädt, das von der Festplatte wiederhergestellt werden kann, und das mit Sicherheit gemeinsam genutzte Bibliotheken sind. Da GUI-Anwendungen in der Regel über unzählige gemeinsam genutzte Bibliotheken verfügen, scheint das System zu glauben, dass es ausreicht, nur einige von ihnen zu entladen, dies funktioniert jedoch nur bis zur nächsten Benutzerbereichsoperation, für die diese entladenen Bibliotheken zurück benötigt werden. Dies scheint das wahrscheinlichste Szenario zu sein, das die Endlosschleife des Entladens und Zurückladens gemeinsam genutzter Bibliotheken verursacht.

Es gibt ein Projekt, das als User Space Daemon fungiert und die speicherintensivsten Prozesse beendet, bevor es zu spät ist: https://github.com/rfjakob/earlyoom

Außerdem habe ich Docker-Container mit vernünftigen Speicherbeschränkungen für speicherhungrige Anwendungen (z. B. Chrome) verwendet.

Vlad Frolov
quelle