2014-01-29 34 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