如何确定是什么导致了我的Rails应用程序变慢

3

我的Rails应用在开发模式下(不使用缓存)运行良好,但在生产环境中加载主要模型的:show视图时遇到了困难。日志只显示SQL查询,大约总计为45毫秒,但实际渲染时间约为15秒。我正在使用acts_as_ferret和paperclip,但是paperclip仅调用after_save循环而无任何操作。此时只有1或2个用户在线,因此我认为没有排队阻塞,但我真的无法确定是什么导致网站负载量过高。我该怎么做才能更精确地测量服务器端功能并查看是什么导致负载时间过长?

:show视图中调用的内容:

  • 大约12个HABTM列表(标签类型,分类等)
  • 用acts_as_ferret找到的相关视频
  • 视频的HABTM评论

这基本上就是全部内容了。作为Rails的最佳实践,我应该如何调用HABTM呢?现在我正在做类似以下的事情:

<%= @video.tags.map {|t| link_to t.name, path} %>
<%= @video.categories.map {|c| link_to c.name, path} %>
#etc....

我相信有更好的方法来解决这个问题,欢迎提出建议。

2个回答

3
以下是针对性能瓶颈的一些工具:
  1. http://newrelic.com/ 可以分析服务器端的数据库查询时间和Ruby执行时间。

  2. http://developer.yahoo.com/yslow/ 可以分析客户端的响应时间、渲染时间和JavaScript等。

虽然没有提供太多可运行的代码,但在Rails中有一些通用的技巧可以帮助使用 findwhere
  1. 使用 :includes 来减少查询次数。
  2. 使用 :select 而不是选择所有列。
以下是一些关于该主题的出色链接:
http://snippets.dzone.com/posts/show/2089
http://www.fortytwo.gr/blog/18/9-Essential-Rails-Tips
http://www.engineyard.com/blog/2009/thats-not-a-memory-leak-its-bloat/

有没有办法包含所有的habtm关联?数据被调用了很多次,将所有预加载到控制器的一行中会很好。 - Kyle Macey

0

检查机器

也许机器上运行的其他程序是问题所在。您尝试过对机器进行分析吗?例如,运行top命令来检查CPU使用情况?


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