Warum verwendet der Befehl "Weniger" zu viel RAM

356
rogerdpack

Ich habe weniger verwendet, um eine ziemlich große Datei (8 GB auf einem Computer mit 4 GB RAM) zu untersuchen. Ich sagte, es solle "zum Ende scrollen" ( shift+ G) und es lief eine ganze Weile, dann wurde es wegen RAM-Auslastung getötet. Ich dachte, ich lesswürde nicht mehr als eine begrenzte Menge an RAM verwenden. Fehlt mir etwas?

0
Haben Sie eine passende Swap-Partition (oder Datei)? Verwenden Sie ein 32-Bit-Betriebssystem? AFH vor 6 Jahren 1
Grundsätzlich kein Swap. Aber nicht weniger ... Sie wissen ... Sie müssen nicht die gesamte Datei in den Speicher lesen. Das ist mein Fragezeichen hier ... :) rogerdpack vor 6 Jahren 0
Ich denke, es liest wahrscheinlich die gesamte Datei in den Speicher, was offensichtlich mit Ihrem System unmöglich ist. Erstellen und aktivieren Sie eine Auslagerungsdatei wie hier beschrieben (https://help.ubuntu.com/community/SwapFaq). Machen Sie sich jedoch keine Sorgen, wenn Sie ein 32-Bit-Betriebssystem haben. AFH vor 6 Jahren 0
Weitere Informationen zu den Speicheranforderungen von "less" finden Sie unter [this link] (https://en.wikipedia.org/wiki/Less_ (Unix) #Memory_considerations)). AFH vor 6 Jahren 0
Wenn ich "-B" verwende, wird interessanterweise nicht "unbegrenzter Arbeitsspeicher" verwendet, aber wenn ich "--buffers = 64" angreife, wird der gesamte Speicher im System verbraucht (obwohl aus einer Datei gelesen wird, nicht aus einer Pipe) ). Wie auch immer, "-B" behebt das Problem. Sie können gerne eine Antwort erstellen. Ich akzeptiere es. rogerdpack vor 6 Jahren 0
In diesem Fall hat FWIW aus einer Datei gelesen, die gerade "geändert wird". Dies kann dazu führen, dass sich die Datei wie eine Pipe oder etwas anderes verhält: | rogerdpack vor 6 Jahren 0

1 Antwort auf die Frage

1
AFH

Die voreingestellte Speichermenge, die von verwendet wird, lesshängt davon ab, ob eine Datei oder eine Pipe gelesen wird. es ist nicht klar, was passiert, wenn aus einer Datei umgeleitet Eingang zu lesen ( less < FilePathstatt less FilePath).

Der folgende Auszug aus der Manualpage (auf Ununtu 16.04) zeigt, wie Sie den Speicher für die lessZuweisung steuern : -

-b n oder --buffers = n

Gibt die Menge an Pufferplatz an, die weniger für jede Datei in Kilobyte (1024 Byte) benötigt wird. Standardmäßig werden für jede Datei 64 KB Pufferplatz verwendet (es sei denn, die Datei ist eine Pipe; siehe Option -B ). Die Option -b gibt stattdessen an, dass für jede Datei n Kilobyte Pufferplatz verwendet werden soll. Wenn n ist -1, Pufferraum ist unbegrenzt; Das heißt, die gesamte Datei kann in den Speicher eingelesen werden.

-B oder --auto-Puffer

Wenn Daten aus einer Pipe gelesen werden, werden die Puffer standardmäßig automatisch nach Bedarf zugewiesen. Wenn eine große Datenmenge aus der Pipe gelesen wird, kann dies dazu führen, dass viel Speicherplatz zugewiesen wird. Die Option -B deaktiviert die automatische Zuweisung von Puffern für Pipe, sodass nur 64 K (oder der durch die Option -b angegebene Speicherplatz ) für die Pipe verwendet wird. Warnung: Die Verwendung von -B kann zu einer fehlerhaften Anzeige führen, da nur der zuletzt angezeigte Teil der Pipe-Daten im Speicher verbleibt. frühere Daten gehen verloren.

Ich lese dies dahingehend, dass beim Lesen aus einer Pipe -b nicht verwendet wird, es sei denn, -B ist auch eine Option. Wenn Sie dies bei jedem Lauf angeben möchten, fügen Sie export LESS='-B'Ihrer Umgebung hinzu (in bashdiesem Fall wäre dies eine Zeile ~/.bashrc).

Beachten Sie, dass dies den Speicherzugriffsversuch einschränken lesswird, unabhängig davon, ob der Speicher durch unzureichenden Swap-Speicherplatz oder durch den maximalen Programmspeicherplatz von 4 GB auf einem 32-Bit-Betriebssystem eingeschränkt ist.