使用 htop 命令可视化 ruby​​ 线程

Posted

技术标签:

【中文标题】使用 htop 命令可视化 ruby​​ 线程【英文标题】:Visualizing ruby threads with htop command 【发布时间】:2019-09-20 21:34:33 【问题描述】:

我正在试验 ruby​​ 中的多线程。我运行了这段同时运行 3 个线程的代码(终端中的ruby threads.rb):

arr = []
arr.push(Thread.new do
  1000000.times do |i|
    puts "thread 1"
  end
end)
arr.push(Thread.new do
  1000000.times do |i|
    puts "thread 2"
  end
end)

arr.push(Thread.new do
  1000000.times do |i|
    puts "thread 3"
  end
end)

arr.each |t| t.join

我现在在终端的树形视图中运行 htop 以查看是否真的可以看到 3 个不同的线程:

我认为threads.rb 进程是突出显示的线程正下方的行,但我无法将我的三个启动线程视为threads.rb 进程的分支。 ruby 线程与 htop 显示的线程和进程无关吗?有没有办法可视化在我的 threads.rb 进程中运行的不同 ruby​​ 线程。

【问题讨论】:

【参考方案1】:

这取决于您的 Ruby 解释器。 MRI 应该为每个 Ruby 线程分配一个本地线程。我已经运行了你的脚本,我可以看到 htop 中的线程(线程超过 3 个,但这一定是解释器所做的):

尝试在htop 中设置过滤器(点击F4 并输入ruby 作为过滤器字符串)。

编辑:我已经在 Debian 上进行了测试。 MacOS 上的htop 显然不显示线程。

【讨论】:

您正在运行什么操作系统和 Ruby 解释器?我在 MacOS 10.14.3 上并在 MRI 上进行了测试,没有看到本机线程。 不,只看到一个 ruby​​ threads.rb 进程,它似乎是 atom 的子进程。我也在 MRI 上运行 macos 10.14.4 哦,好的——我在 Debian 上。似乎htop 没有在 OSX 上显示线程:github.com/hishamhm/htop/issues/552 - 有一个 PR 打开,但它没有合并。见***.com/questions/28047653/…,HTH。

以上是关于使用 htop 命令可视化 ruby​​ 线程的主要内容,如果未能解决你的问题,请参考以下文章

可视化显示负载(apache)

centos系统查看资源使用情况的工具

htop 线程也有pid吗?

+++++++进程管理工具 top/htop/glances/dstat命令

为啥 htop 列出了这么多 mysql 连接?

CentOS7常用安装软件列表