我正在帮助某人通过他们的RoR应用程序诊断出一些缓慢的问题。我不是那么深入到ruby开发中,但是通过在ruby过程中运行一个strace,我注意到以下奇怪之处:</ p>
对于大概包含的每个.rb
文件,ruby进程会检查要包含的文件的大约110个不同位置,除了1之外的所有文件都返回ENOENT
。这些路径包括本地目录和gem安装目录中的许多不存在的排列。具有讽刺意味的是,尝试的第8个位置找到了正确的路径,但是ruby接着尝试另外100个无效位置,然后返回并打开它在搜索开始时找到的文件。
整个搜索过程每个包含.rb
文件大约需要30毫秒,这累积意味着页面加载时间过长,导致网站无法使用。
我已经发布了strace输出的示例,以防它在这里有用:http://pastebin.com/t9LD89dr
那么,为什么要这样做,我该如何让它停止?
答案 0 :(得分:2)
这是一个known problem with Ruby's require ......显然他们会用Ruby 1.9.3修复它。
因此,在启动Ruby应用程序时,这种缓慢很难避免。