2012-11-15 9 views
11

Ich führe ein Programm, und es wird durch Segmentierung Fehler unterbrochen. Das Problem ist, dass die Core-Dump-Datei erstellt wird, aber der Größe Null.Leere Core-Dump-Datei nach Segmentierungsfehler

Haben Sie von einem solchen Fall und dessen Lösung gehört?

Ich habe genug Platz auf der Festplatte. Ich habe bereits ulimit -c unlimited durchgeführt, um die Größe der Kerndatei zu begrenzen - sowohl, wenn sie ausgeführt wird oder oben auf der übermittelten Batch-Datei gesetzt wird - aber immer noch 0-Byte-Core-Dump-Dateien. Die Berechtigungen des Ordners, der diese Dateien enthält, sind uog + rw und die Berechtigungen für die erstellten Kerndateien sind nur u + rw.

Das Programm wird von C++ geschrieben und auf einem Linux-Cluster mit Qsub-Befehl der Grid-Engine eingereicht, ich weiß nicht, ob diese Information relevant ist oder nicht auf diese Frage.

+0

Sie haben freien Speicherplatz auf dem Laufwerk, das ich annehme? –

+0

Was sind die Schreibrechte für die Null-Datei? – eh9

+0

Nächste Fragen: Was sind die Berechtigungen für das enthaltende Verzeichnis? Wird der Prozess unter einer effektiven Benutzer-ID ausgeführt, die sich vom Verzeichnisbesitzer unterscheidet? – eh9

Antwort

5

Es klingt wie Sie einen Batch-Scheduler verwenden, um Ihre ausführbare Datei zu starten. Vielleicht erbt die Shell, die Torque/PBS zum Erstellen Ihres Jobs verwendet, einen anderen ulimit-Wert? Vielleicht besteht die Standardkonfiguration des Schedulers nicht darin, Core Dumps zu erhalten?

Können Sie Ihr Programm direkt über die Befehlszeile ausführen?

Oder wenn Sie ulimit -c unlimited und/oder ulimit -s unlimited am Anfang Ihres PBS-Batch-Skripts hinzufügen, bevor Sie Ihre ausführbare Datei aufrufen, können Sie das standardmäßige ulimit-Verhalten von PBS überschreiben. Oder das Hinzufügen von 'ulimit -c' könnte trotzdem anzeigen, was das Limit ist.

+0

Ich habe sowohl "ulimit -c unlimited" als auch "ulimit -s unlimited" in das PBS-Batch-Skript geschrieben, aber die Core-Dumps sind noch leer! – Ali

+1

Was ist das Dateisystem, das Sie zum Dumpen des Kerns verwenden? –

6

Einstellung ulimit -c unlimited eingeschaltet Generation von Dumps. Standardmäßig wurden Core-Dumps im aktuellen Verzeichnis generiert, das sich auf NFS befand. Einstellung /proc/sys/kernel/core_pattern zu /tmp/core hat mir geholfen, das Problem der leeren Dumps zu lösen.

Die comment from Ranjith Ruban hat mir geholfen, diese Problemumgehung zu entwickeln.

Was ist das Dateisystem, das Sie für Dumping den Kern verwenden?

+0

Ich hatte gerade dieses Problem auf einem Linux VirtualBox-Image mit einem vboxsf-Dateisystem, das auf ein NTFS-Laufwerk (das Laufwerk des Host-Computers) abgebildet wurde. –

+0

Ändern des core_pattern als Root-Benutzer wirkt Wunder! Der NFS-Laufwerkspfad hat Kerndateien zu null Bytes gemacht. http://StackOverflow.com/a/12760552/999943 Neben dem Pfad, in dem es erstellt wird, gibt es eine raffinierte Syntax, um zu ändern, wie eine Core-Datei benannt wird. http://www.linuxhowtos.org/Tips%20and%20Tricks/coredump.htm – phyatt

0

Sie können mithilfe qsub Option wie -l h_vmem=6G erforderlichen Ressourcengrenzen wie physischen Speicher Satz 6 GB physischen Speicher reserver.

Für Dateiblöcke können Sie auch h_fsize auf den entsprechenden Wert setzen.

Siehe Ressourcengrenzen Abschnitt qconf manpage:

http://gridscheduler.sourceforge.net/htmlman/htmlman5/queue_conf.html

s_cpu  The per-process CPU time limit in seconds. 

s_core The per-process maximum core file size in bytes. 

s_data The per-process maximum memory limit in bytes. 

s_vmem The same as s_data (if both are set the minimum is 
      used). 
h_cpu  The per-job CPU time limit in seconds. 

h_data The per-job maximum memory limit in bytes. 

h_vmem The same as h_data (if both are set the minimum is 
      used). 

h_fsize The total number of disk blocks that this job can 
      create. 

Auch wenn Cluster lokale TMPDIR zu jedem Knoten verwendet, und das Auffüllen ist, können Sie TMPDIR zu alternativen Standort mit mehr einstellen Kapazität, z NFS-Freigabe:

export TEMPDIR=<some NFS mounted directory> 

Dann starten qsub mit der -V Option, um die aktuelle Umgebung, um den Job zu exportieren.

Eine oder eine Kombination der oben genannten kann Ihnen helfen, Ihr Problem zu lösen.

0

Wenn Sie die Core-Datei in einem bereitgestellten Laufwerk ausführen.Die Core-Datei kann nicht auf ein bereitgestelltes Laufwerk geschrieben werden, sondern muss auf das lokale Laufwerk geschrieben werden.

Sie können die Datei auf das lokale Laufwerk kopieren.