我怎样才能在rubinius中进行线程转储?

时间:2016-09-13 16:38:13

标签: ruby multithreading rubinius

我想做一个我的rubinius应用程序的线程转储,以帮助调查明显的死锁问题。我的应用程序正在使用rbx-3.21,如果可能的话,我宁愿不改变它。

我尝试过像描述here那样的纯ruby解决方案,但线程回溯无法正常工作 - 它们看起来与执行堆栈转储的线程相同。结果看起来像这样:

Thread-1uvk
common/service.rb:192:in `dump_threads'
  common/service.rb:190:in `dump_threads'
  common/service.rb:90:in `prepare_status'

Thread-1uvs
common/service.rb:192:in `dump_threads'
  common/service.rb:190:in `dump_threads'
  common/service.rb:90:in `prepare_status'

....etc

1 个答案:

答案 0 :(得分:0)

你应该看一下Rubinius Book,它记录了一些新工具。具体来说,请查看:https://book.rubinius.com/manuscript/inspectability.html

我通常使用该页面底部给出的示例运行我的代码:

rbx -Xsystem.diagnostics.target='./diagnostics-$PID.json' -Xsystem.profiler.target=diagnostics some_script.rb

这会将统计信息(包括线程配置文件)写入json文件。

如果没有足够的信息,请在许多Rubinius用户闲逛的Gitter房间停留并寻求帮助。