Ich sortiere eine 25-GB-Datei mit 200 Millionen Zeilen auf Fedora 18 mit:
sortiere -S 10G -T / bigdisk bigfile
und ich bekomme Prozess wegen fehlender Erinnerung getötet. Der Prozess maximiert meinen Arbeitsspeicher nicht vor dem Tod (12 GB frei) und der Speicherplatz ist in Ordnung.
Anregungen zur Ursache erwünscht. Ich bin sicher, dass sort dies aufgrund seiner Partitionierung und Zusammenführung verwalten kann.
Weitere Infos von dmesg
[87278.935572] Out of memory: Kill process 1971 (sort) score 258 or sacrifice child
[87278.935574] Killed process 1971 (sort) total-vm:4512168kB, anon-rss:4237040kB, file-rss:584kB
/run/shm
meine/bigdisk
zum Speichern von temporären Dateien verwendete. Es scheint, dass der Kernel die RAM-Disk/run/shm
als wichtiger erachtet. Als also sort darauf geschrieben wurde und der Speicher knapp wurde, hat der Kernel sort getötet. Die Verwendung einer trägen VM-Festplatte löste das Problem.Antworten:
Nicht benutzen
-S 10G
, es ist viel zu viel (und wahrscheinlich nicht das tun, was du denkst). Das Starten von OOMkiller bedeutet, dass Ihr System den gesamten Speicher belegt.Gemäß dem verwendeten Algorithmus durch
sort
, wird es Speicher nach verwenden , was verfügbar ist : die Hälfte der größten Zahl zwischen TotalMem / 8 und AvailableMem.Wenn Sie beispielsweise über 4 GB verfügbaren Speicher (von 8 GB) verfügen,
sort
werden 2 GB RAM verwendet. Es sollte auch viele 2-GB-Dateien in / bigdisk erstellen und schließlich zusammenführen und sortieren.quelle
sort
? Überprüfen Sie mitfile $(which sort)
.Eine Antwort aus meinem Kommentar machen:
Ich hatte das gleiche Problem , wenn ich verwende
/run/shm
als meine/bigdisk
zum Speichern vonsort
temporären Dateien./run/shm
ist eine RAM-Festplatte. Wenn also eine Sortierung erforderlich ist, um Teilergebnisse auf der Festplatte zwischenzuspeichern (was der Fall ist, wenn der Speicher fast voll ist), ist der Speicher erschöpft. Der Kernel wurde getötetsort
, da der Prozess den meisten Speicher beanspruchte.Die Verwendung eines Speicherorts auf einer physischen Festplatte anstelle der RAM-Festplatte löste das Problem.
quelle
Versuchen Sie Folgendes einzustellen
vm.overcommit_memory = 1
: «…… »
Und tun Verwendung Swap.
quelle
sort
und nicht vom Kernel stammt.sort
Verwendet / benötigt zu viel Speicher. Mitovercommit_memory=2
,sort
wird es einfach nicht schaffenmalloc()
und wird dann höchstwahrscheinlich nicht sortieren.