2014-01-29 33 views
6

我有一個在RHEL6.x(64位)上運行的多線程進程。使用strace修補程序掛起內存問題

我發現進程掛起,並且某些線程(同一進程)在我嘗試啓動進程時大部分時間崩潰。一些線程等待線程之間的共享內存被創建(我可以看到它沒有被創建)。

但是,當我使用strace時,進程沒有掛起,它工作得很好(應該創建的所有內存都被創建)。即使在內存被創建後中斷strace,也可以使進程正常運行。

我已閱讀本:

strace fixes hung process

這的確給我出個主意。但我仍然不清楚,因爲他們使用的RHEL版本沒有提及。另外,還有一點是,將內核更改爲Fedora(兼容)內核並不會產生問題。

所以,我只想知道strace究竟是如何影響流程的? (或者它只是鏈接中指出的移回內核的堆棧)?

+0

我遇到了同樣的問題。如果我將它附加到strace,一個通常掛在select()調用上的進程將恢復。如果我不把它放在strace上,它就會永遠掛在那裏。 – ernesto

回答

1

我還不能評論,但我在過去的工作中看到過類似的東西。由於並沒有確切的答案,所以我將繼續這樣做:

由於計時問題而導致線程之間發生死鎖的可能性是什麼?減慢程序執行速度?

如果您通過過程進行調試而不是strace,會發生什麼情況?

+0

我同意。 strace輸出只會減慢進程,使得死鎖的可能性大大降低。我以前見過這種情況發生在使用strace或在添加其他調試打印或調試調用時可能發生。 – gaoithe