2

我在 500 MB Slicehost VPN 上部署了一个简单的 Rails 应用程序。我是唯一一个使用该应用程序的人。当我在笔记本电脑上运行它时,它已经足够快了。但是部署的版本非常慢。加载登录屏幕需要 6 到 10 秒。

我想知道为什么它这么慢。是我的代码吗?(不要这么认为,因为它在本地要快得多,但也许。)是 Slicehost 的服务器过载了吗?是互联网吗?

有人可以建议我可以采取的一种技术或一组步骤来帮助缩小这个问题的原因吗?


更新:

抱歉忘了提。我正在使用 Phusion Passenger(AKAmod_railsmod_rack)在 CentOS 5 下运行它。

4

10 回答 10

5

如果您第一次加载时速度很慢,则可能是因为乘客由于不活动而杀死了该过程。我不记得所有细节,但我确实记得读过一些人使用 cron 作业来保持至少一个进程处于活动状态,以避免在乘客需要重新加载环境时可能发生的这种滞后。

编辑:更多细节在这里

具体来说 - 池空闲时间默认为 2 分钟,这意味着在空闲两分钟后,乘客将不得不重新加载环境以服务下一个请求。

于 2009-03-25T12:29:41.117 回答
4

首先,找出服务器的响应是否特别慢。使用 Firefox 和 Firebug 插件查看每个组件(包括 JavaScript 和图形)下载所需的时间。假设主页本身一直在占用,您可以开始分析应用程序。你需要找到一个好的分析器,因为我实际上并没有在 Ruby on Rails 中工作,所以我不能提出任何建议:google "profile ruby​​ on rails" 以获得一些选项。

正如 YenTheFirst 指出的那样,您使用的服务器软件和配置可能会导致速度变慢,但是 A) slicehost 不会选择这样做,因为 Slicehost 只是提供非常原始的服务器“切片”,您可以将其视为专用机器. B) 您不太可能仅仅因为它作为 CGI 运行而看到一个立即运行的脚本突然需要 6 秒。一定有别的事情发生。检查你使用了多少内存:你进入交换了吗?登录是不是只有在第一次被击中时才会出现启动问题,还是总是那么慢?静态内容服务慢吗?这往往意味着某些网络问题(在 Slicehost 端或您的本地网络上)正在减慢速度,假设您不在交换中。

当您说“足够快”时,您是在含糊其辞:笔记本电脑版本是否需要 1 秒才能到达 Slicehost 6?如果笔记本电脑不错,那也不足为奇:毕竟,切片便宜的原因是因为它们只是完整服务器的一小部分。您在 Slicehost 上使用的可能是 8 核机器的 1/32,而不是现代笔记本电脑的两个内核。Slicehost 内核速度很快,但与 1/4 的内核相比,您的笔记本电脑可能会令人尖叫。:)

于 2009-03-25T06:03:17.537 回答
3

试着找出缓慢的地方

1/ 应用程序很慢,或者基础设施(网络 + Web 服务器)

  • 在您的网络服务器上放置一个静态文件,并通过您的浏览器访问它

2/ 如果速度很快,可能是应用程序+服务器配置有问题。

  • 数据库访问很慢
  • 尝试一个带有简单循环的页面:它慢吗?

3/ 如果它很慢,可能是你的基础设施。您可以检查:

  • 网络连接不良:进行数据包捕获(例如使用 Wireshark)并查找重传、重复数据包等。
  • DNS解析慢?
  • 服务器配置错误?
  • 等等
于 2009-03-25T22:36:32.733 回答
1

Slicehost 使用什么来提供服务?快速选项如下: Mongrel 或 apache 的 mod_rails(也称为乘客 phusion 或类似的东西) 这些是运行您的 rails 应用程序实例的专用服务器(或服务器插件)。

如果您的主机没有使用它,那么它可能默认为 CGI。Rails 附带了一个简单的 CGI 脚本,它将为页面提供服务,但它会为每个页面重新加载应用程序。

(编辑:我怀疑这是最有可能的情况,即您的应用程序正在运行 /webapp_directory/public/dispatch.cgi 中的 CGI,这可以解释速度缓慢。这往往是许多主机上的默认部署,因为它不需要额外的配置,但它并没有提供良好的性能)

如果你的主机支持“Fast CGI”,rails 也支持。Fast CGI 将打开一个 CGI 会话,并为多个页面保持打开状态,因此您可以获得更好的性能,但它不如 Mongrel 或 mod_rails 好。

其次,它是处于“生产”模式还是“开发”模式?最简单的判断方法是转到您的应用程序中出现错误的页面。如果它向您显示堆栈跟踪,则它处于开发模式,比生产模式慢。Mongrel 和 mod_rails 有启动选项来确定是在生产模式还是开发模式下运行应用程序。

最后,如果您的数据库由于某种原因运行缓慢,这也将是一个很大的瓶颈。如果您在生产模式下确实有良好的部署(Mongrel/mod_rails/etc.),请尝试调查。

于 2009-03-25T05:24:41.217 回答
1

您的数据库中是否有大量数据?我会仔细检查您是否为所有适当的列编制了索引——因为这会产生巨大的影响。在您的本地开发系统上,您的内存可能比您的 500 mb 切片上的内存多得多,如果您有大的、未编制索引的表,这将导致数据库运行速度变慢。您还可以在 MySql 中运行慢查询记录器来查明没有索引的列。

除此之外,是的,如果您最近没有使用该网站,乘客将需要为您准备一个流程。如果是这种情况,您应该会看到第二次页面加载速度显着提高,尤其是第三次及以后的页面加载。

于 2009-03-25T14:04:12.263 回答
1

您可能希望运行 500 MB 的本地虚拟机。您是否进行了大量的客户端-服务器交互?WAN 上的延迟很严重

于 2009-03-25T15:38:10.697 回答
1

您可能想查看RPM(也有免费的“精简版”版本)和/或 New Relic 的Tune Up

于 2009-03-25T22:52:23.087 回答
0

您的 CPU 时间由使用 Xen 虚拟化系统的 Slicehost 保证,因此并非如此。没有其他答案给你,对不起!当您尝试访问该页面时,可能会在控制台上尝试“顶部”。

于 2009-03-25T05:22:10.083 回答
0

如果您正在使用 FireFox 并进行 localhost 测试(或者甚至在 LAN 上),您可能需要尝试编辑 network.dns.disableIPv6 设置。

在地址栏中键入 about:config 并过滤 network.dns.disableIPv6 并双击以设置为 true。

这个错误主要来自 Vista 操作系统,但也有一些其他的。

于 2009-04-06T15:10:28.287 回答
0

您可以尝试在 SSH 进入时运行“top”以查看哪个进程很重。如果您在登录时也遇到问题,也许您可​​以尝试在 Slicehost 管理器中获取统计信息。

如果您发现这是 MySQL 的错误,请考虑减少它可以生成的服务器数量。

512 对于 Rails 应用程序来说似乎不错,您可能还需要检查您是否也配置错误。

于 2009-04-19T23:40:13.680 回答