2014-01-29 5 views
6

Ich habe einen Multithread-Prozess auf RHEL6.x (64bit) ausgeführt.Verwenden von Strace-Fixes hängen Speicherproblem

Ich finde, dass der Prozess hängt und einige Threads (des gleichen Prozesses) die meiste Zeit abstürzen, wenn ich versuche, den Prozess zu starten. Einige Threads warten auf gemeinsamen Speicher zwischen den Threads zu erstellen (ich kann sehen, dass alles nicht erstellt wird).

Aber wenn ich Strace verwende, hängt der Prozess nicht und es funktioniert gut (der gesamte Speicher, der erstellt werden soll, wird erstellt). Selbst wenn strace unterbrochen wird, nachdem der Speicher erstellt wurde, bleibt der Prozess für immer in Ordnung.

Ich habe diese Zeilen lesen:

strace fixes hung process

, die mir eine Idee tat geben. Ich bin aber immer noch unklar, da die von ihnen verwendete RHEL-Version nicht erwähnt wird.

Ein weiterer Punkt ist, dass das Ändern des Kernels zu einem fedora (kompatiblen) Kernel das Problem nicht verursachte.

Also möchte ich nur wissen, wie genau strace einen Prozess beeinflusst? (Oder ist es nur der Stack, der wie im Link gezeigt, zum Kernel zurückkehrt)?

+0

Ich habe das gleiche Problem. Ein Prozess, der normalerweise an einem select() -Aufruf hängt, wird fortgesetzt, wenn ich ihn an strace anschließe. Wenn ich es nicht an strace anhefte, bleibt es einfach für immer dort hängen. – ernesto

Antwort

1

Ich kann noch nicht kommentieren, aber ich habe ähnliche Dinge in der Vergangenheit Arbeit gesehen. Da es nicht wirklich eine definitive Antwort gegeben werden muss, werde ich damit gehen:

Was sind die Chancen, dass Sie einen Deadlock zwischen Threads wegen Timing-Probleme eingeben, die durch strace "gelöst" werden verlangsamen die Programmausführung?

Was passiert, wenn Sie durch den Prozess debuggen, anstatt strace?

+0

Ich stimme zu. Strace-Ausgabe verlangsamt den Prozess einfach und macht Deadlocks weniger wahrscheinlich. Ich habe gesehen, dass dies zuvor mit strace OR geschehen kann, wenn andere Debug-Druck oder Debug-Aufrufe hinzugefügt werden. – gaoithe