【问题标题】:Using strace fixes hung memory issue使用 strace 修复挂起的内存问题
【发布时间】:2014-02-21 10:05:14
【问题描述】:

我有一个在 RHEL6.x(64 位)上运行的多线程进程。

当我尝试启动该进程时,我发现该进程挂起并且(同一进程的)某些线程大部分时间都崩溃了。一些线程等待线程之间的共享内存被创建(我可以看到它没有被创建)。

但是当我使用 strace 时,进程并没有挂起,它工作得很好(所有应该创建的内存都被创建了)。即使在创建内存后中断 strace,也可以使进程永远正常运行。

我已阅读:

strace fixes hung process

这确实给了我一个想法。但我仍然不清楚这一点,因为没有提到他们使用的 RHEL 版本。

另外,另一点是,将内核更改为 fedora(兼容)内核并没有产生问题。

所以,我想知道 strace 究竟是如何影响进程的? (或者只是链接中指出的移回内核的堆栈)?

【问题讨论】:

  • 我遇到了同样的问题。如果我将它附加到 strace,则通常挂在 select() 调用上的进程会恢复。如果我不将它附加到 strace,它就会永远挂在那里。

标签: unix process kernel rhel strace


【解决方案1】:

我还不能发表评论,但我在过去的工作中看到过类似的事情。由于没有真正确定的答案,我打算这样做:

由于时间问题,您在线程之间进入死锁的可能性有多大,而这可以通过 strace 减慢程序执行速度来“解决”?

如果您通过进程而不是 strace 进行调试会发生什么?

【讨论】:

  • 我同意。 strace 输出只会减慢进程,从而降低死锁的可能性。我在 strace 之前看到过这种情况,或者在添加其他调试打印或调试调用时会发生这种情况。
猜你喜欢
  • 2013-12-14
  • 1970-01-01
  • 2013-02-10
  • 1970-01-01
  • 2016-12-14
  • 1970-01-01
  • 2011-07-08
  • 1970-01-01
  • 2020-11-25
相关资源
最近更新 更多