Welche Prozesskiller hat Linux? [geschlossen]

7

Einige meiner Jobs werden aus irgendeinem Grund vom Betriebssystem getötet. Ich muss untersuchen, warum dies geschieht. Die Jobs, die ich ausführe, zeigen keine Fehlermeldungen in ihren eigenen Protokollen an, was wahrscheinlich darauf hinweist, dass os sie getötet hat. Niemand sonst hat Zugriff auf den Server. Ich bin mir des OOM-Killers bewusst. Gibt es noch andere Prozesskiller? Wo würde ich Protokolle für diese Dinge finden?

mss
quelle
6
Dies bedeutet nicht unbedingt, dass das Betriebssystem sie getötet hat. Ein Programm kann einen "Segmentierungsfehler" aufweisen oder einen Fehler (Absturz) aufweisen oder ulimitEinschränkungen überschreiten (Heap ist gut, ebenso wie zu viele Prozesse für eine Java-Thread-App) oder JVM-definierte Grenzwerte überschreiten (für ein Java-Programm) oder für viele sterben andere Gründe; Keines davon muss die Ausgabe in Anwendungsprotokollen protokollieren.
Stephen Harris
Der Job ist ein Python-Skript, daher bezweifle ich sehr, dass es ein Seg-Fehler ist. Es dauert etwa 24 GB Speicher.
MSS
1
Im Falle eines Python-Skripts würde jede nicht behandelte Ausnahme ausreichen. Die Frage enthält bei weitem nicht genug Informationen, um über das Erraten hinauszugehen.
Dmitry Grigoryev
Können Sie zumindest den Rückkehrcode von einem übergeordneten Prozess erhalten?
Jeff Schaller
2
Es war in der Tat OOM, ich fand die Nachrichten in var / log. Ich denke, irgendwann hat die Speichernutzung zugenommen und OOM hat sich darum gekümmert.
MSS

Antworten:

13

oom ist derzeit das einzige, was automatisch tötet.

dmesg

und / var / log / messages sollten oom Kills anzeigen.

Wenn der Prozess dieses Signal verarbeiten kann, könnte er zumindest den Kill protokollieren.

Normalerweise werden Gedächtnisschweine getötet. Möglicherweise kann Ihnen mehr Swap-Speicherplatz helfen, wenn der Speicher nur zugewiesen wird, aber nicht wirklich benötigt wird.

Sonst: Holen Sie sich mehr RAM.

Nils
quelle
1
Korrektur: "oom [Killer] ist derzeit das einzige, was außerhalb des Prozesses automatisch beendet wird ". Wie @StephenHarris erwähnt, ist es durchaus möglich, dass sich ein Programm aus verschiedenen Gründen selbst beendet, die möglicherweise nicht in einem System- oder Anwendungsprotokoll angezeigt werden (z SIGSEGV. B. ).
Christopher Schultz
9

Denken Sie daran:

  • einen SIGSEGVoder SIGBUSfür ungültigen Speicherzugriff erhalten
  • SIGILL für ungültige Anweisungen
  • SIGFPE bei einer ungültigen arithmetischen Operation wie Division durch 0
  • SIGXCPUoder SIGXFSZwenn der Prozess einige Grenzen überschreitet
  • SIGHUP für getrennte Klemmen und einige andere Situationen
  • SIGPIPE beim Versuch, in ein geschlossenes Rohr oder einen geschlossenen Sockel zu schreiben
Stéphane Chazelas
quelle