如何诊断Ruby启动时间非常缓慢的问题?

3
Intermittently,当我输入一个涉及Ruby的命令时(比如ruby somefile.rbrakerspec specirb),命令执行需要很长时间。例如,几分钟前,启动irb需要大约一分钟的时间。几秒钟前,只需要大约一秒钟的时间。

等待irb启动时,我反复按下Control+T。我看到的一些输出包括:

load: 1.62  cmd: ruby 12374 uninterruptible 0.45u 0.13s
load: 1.62  cmd: ruby 12374 uninterruptible 0.48u 0.13s
load: 1.62  cmd: ruby 12374 uninterruptible 0.53u 0.15s

在OSX上,这个输出代表“负载、命令运行、pid、状态以及用户和系统CPU时间使用情况”。当我等待了53秒时,使用的CPU时间仅为0.15秒。

我对负载的理解是大致上是“有多少核正在被使用”。例如,在单核系统上,1.0是完全利用,但在四核机器上,它是25%的利用率。我认为负载量不是问题,因为我的机器是多核的。此外,当irb快速启动时,我可以得到一行输出,其值也大于1.0

load: 1.22  cmd: ruby 12452 running 0.26u 0.02s

我注意到在良好的情况下,状态为“运行”,而不是“不可中断”。
我该如何诊断和修复这些缓慢的启动?

1
“不间断”让我想到它被卡在I/O中了。如果在后续执行中变快,可能只是磁盘速度慢而已。我来评论区问一下:这是什么Ruby版本?(ruby -v - Satya
@Satya - Ruby 2.1.2p95。进一步的研究表明,它可能正在等待IO系统调用。也许我可以使用某种dtrace工具来查看。 - Nathan Long
2
我建议将这个问题转移到[apple.se]网站。虽然这个问题与开发有关,但是原因和解决方法很可能在那里找到,因为它更可能是一个操作系统或硬件层面的问题。 - the Tin Man
旧的安全方式(卸载并重新安装Ruby)怎么样?尝试使用rbenv。 - Radolino
确保您使用的是终端而不是iterm2。我在我的Macbook Pro(2011)上使用iTerm时遇到了类似的问题。其他可能性包括:
  • 硬盘速度变慢/故障
  • 可用RAM不足
  • 后台运行太多进程
- Nikesh
显示剩余5条评论
1个回答

1
这是一种不太可能的情况。尝试安装haveged 我以前见过这个问题。对我有帮助的是解决了它。有时库或 Ruby 的元素尝试加载随机数池时,熵不足。
如果你注意到某些东西启动所需时间很快,当你打字更多、移动鼠标、使用大量网络流量时——那么就是熵,这与你想象的大部分情况相反。
如果有更多的处理器和 RAM 使用、与系统的互动等——你会认为它会变慢,但在熵耗尽的情况下,这实际上正是你需要的。

今天我刚了解到这个 - 这在笔记本电脑上不太可能发生,但在任何类型的虚拟机中越来越可能出现,这可能就是 Long 先生使用的。请尝试移动鼠标或打开其他应用程序并调整窗口大小。 - changokun

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接